diff --git a/db/migrations/20140531205700_CreateAllianceTeams.sql b/db/migrations/20140531205700_CreateAllianceTeams.sql deleted file mode 100644 index f35eb99..0000000 --- a/db/migrations/20140531205700_CreateAllianceTeams.sql +++ /dev/null @@ -1,11 +0,0 @@ --- +goose Up -CREATE TABLE alliance_teams ( - id INTEGER PRIMARY KEY, - allianceid int, - pickposition int, - teamid int -); -CREATE UNIQUE INDEX alliance_position ON alliance_teams(allianceid, pickposition); - --- +goose Down -DROP TABLE alliance_teams; diff --git a/db/migrations/20140811222034_CreateLowerThirds.sql b/db/migrations/20140811222034_CreateLowerThirds.sql deleted file mode 100644 index e346b20..0000000 --- a/db/migrations/20140811222034_CreateLowerThirds.sql +++ /dev/null @@ -1,11 +0,0 @@ --- +goose Up -CREATE TABLE lower_thirds ( - id INTEGER PRIMARY KEY, - toptext VARCHAR(255), - bottomtext VARCHAR(255), - displayorder int, - awardid int -); - --- +goose Down -DROP TABLE lower_thirds; diff --git a/db/migrations/20190809204907_CreateAwards.sql b/db/migrations/20190809204907_CreateAwards.sql deleted file mode 100644 index 03c6d4e..0000000 --- a/db/migrations/20190809204907_CreateAwards.sql +++ /dev/null @@ -1,11 +0,0 @@ --- +goose Up -CREATE TABLE awards ( - id INTEGER PRIMARY KEY, - type int, - awardname VARCHAR(255), - teamid int, - personname VARCHAR(255) -); - --- +goose Down -DROP TABLE awards; diff --git a/model/alliance_team.go b/model/alliance_team.go index 75942c2..c697bce 100644 --- a/model/alliance_team.go +++ b/model/alliance_team.go @@ -5,53 +5,70 @@ package model +import "sort" + type AllianceTeam struct { - Id int + Id int64 `db:"id"` AllianceId int PickPosition int TeamId int } func (database *Database) CreateAllianceTeam(allianceTeam *AllianceTeam) error { - return database.allianceTeamMap.Insert(allianceTeam) + return database.tables[AllianceTeam{}].create(allianceTeam) } func (database *Database) GetTeamsByAlliance(allianceId int) ([]AllianceTeam, error) { var allianceTeams []AllianceTeam - err := database.allianceTeamMap.Select(&allianceTeams, - "SELECT * FROM alliance_teams WHERE allianceid = ? ORDER BY pickposition", allianceId) - return allianceTeams, err + if err := database.tables[AllianceTeam{}].getAll(&allianceTeams); err != nil { + return nil, err + } + sort.Slice(allianceTeams, func(i, j int) bool { + return allianceTeams[i].PickPosition < allianceTeams[j].PickPosition + }) + + var matchingAllianceTeams []AllianceTeam + for _, allianceTeam := range allianceTeams { + if allianceTeam.AllianceId == allianceId { + matchingAllianceTeams = append(matchingAllianceTeams, allianceTeam) + } + } + return matchingAllianceTeams, nil } -func (database *Database) SaveAllianceTeam(allianceTeam *AllianceTeam) error { - _, err := database.allianceTeamMap.Update(allianceTeam) - return err +func (database *Database) UpdateAllianceTeam(allianceTeam *AllianceTeam) error { + return database.tables[AllianceTeam{}].update(allianceTeam) } -func (database *Database) DeleteAllianceTeam(allianceTeam *AllianceTeam) error { - _, err := database.allianceTeamMap.Delete(allianceTeam) - return err +func (database *Database) DeleteAllianceTeam(id int64) error { + return database.tables[AllianceTeam{}].delete(id) } func (database *Database) TruncateAllianceTeams() error { - return database.allianceTeamMap.TruncateTables() + return database.tables[AllianceTeam{}].truncate() } func (database *Database) GetAllAlliances() ([][]AllianceTeam, error) { - alliances := make([][]AllianceTeam, 0) var allianceTeams []AllianceTeam - err := database.allianceTeamMap.Select(&allianceTeams, - "SELECT * FROM alliance_teams ORDER BY allianceid, pickposition") - if err == nil { - // Format the sorted list of teams into a two-dimensional slice. - currentAllianceId := -1 - for _, allianceTeam := range allianceTeams { - if allianceTeam.AllianceId != currentAllianceId { - currentAllianceId = allianceTeam.AllianceId - alliances = append(alliances, make([]AllianceTeam, 0)) - } - alliances[len(alliances)-1] = append(alliances[len(alliances)-1], allianceTeam) - } + if err := database.tables[AllianceTeam{}].getAll(&allianceTeams); err != nil { + return nil, err } - return alliances, err + sort.Slice(allianceTeams, func(i, j int) bool { + if allianceTeams[i].AllianceId == allianceTeams[j].AllianceId { + return allianceTeams[i].PickPosition < allianceTeams[j].PickPosition + } + return allianceTeams[i].AllianceId < allianceTeams[j].AllianceId + }) + + alliances := make([][]AllianceTeam, 0) + // Format the sorted list of teams into a two-dimensional slice. + currentAllianceId := -1 + for _, allianceTeam := range allianceTeams { + if allianceTeam.AllianceId != currentAllianceId { + currentAllianceId = allianceTeam.AllianceId + alliances = append(alliances, make([]AllianceTeam, 0)) + } + alliances[len(alliances)-1] = append(alliances[len(alliances)-1], allianceTeam) + } + return alliances, nil } diff --git a/model/alliance_team_test.go b/model/alliance_team_test.go index f99006a..822b172 100644 --- a/model/alliance_team_test.go +++ b/model/alliance_team_test.go @@ -10,6 +10,7 @@ import ( func TestGetNonexistentAlliance(t *testing.T) { db := setupTestDb(t) + defer db.Close() allianceTeams, err := db.GetTeamsByAlliance(1114) assert.Nil(t, err) @@ -18,6 +19,7 @@ func TestGetNonexistentAlliance(t *testing.T) { func TestAllianceTeamCrud(t *testing.T) { db := setupTestDb(t) + defer db.Close() allianceTeam := AllianceTeam{0, 1, 0, 254} db.CreateAllianceTeam(&allianceTeam) @@ -27,13 +29,13 @@ func TestAllianceTeamCrud(t *testing.T) { assert.Equal(t, allianceTeam, allianceTeams[0]) allianceTeam.TeamId = 1114 - db.SaveAllianceTeam(&allianceTeam) + db.UpdateAllianceTeam(&allianceTeam) allianceTeams, err = db.GetTeamsByAlliance(1) assert.Nil(t, err) assert.Equal(t, 1, len(allianceTeams)) assert.Equal(t, allianceTeam.TeamId, allianceTeams[0].TeamId) - db.DeleteAllianceTeam(&allianceTeam) + db.DeleteAllianceTeam(allianceTeam.Id) allianceTeams, err = db.GetTeamsByAlliance(1) assert.Nil(t, err) assert.Empty(t, allianceTeams) @@ -41,6 +43,7 @@ func TestAllianceTeamCrud(t *testing.T) { func TestGetTeamsByAlliance(t *testing.T) { db := setupTestDb(t) + defer db.Close() BuildTestAlliances(db) allianceTeams, err := db.GetTeamsByAlliance(1) @@ -61,6 +64,7 @@ func TestGetTeamsByAlliance(t *testing.T) { func TestTruncateAllianceTeams(t *testing.T) { db := setupTestDb(t) + defer db.Close() allianceTeam := AllianceTeam{0, 1, 0, 254} db.CreateAllianceTeam(&allianceTeam) @@ -72,6 +76,7 @@ func TestTruncateAllianceTeams(t *testing.T) { func TestGetAllAlliances(t *testing.T) { db := setupTestDb(t) + defer db.Close() alliances, err := db.GetAllAlliances() assert.Nil(t, err) diff --git a/model/award.go b/model/award.go index 97293e8..b3ec975 100644 --- a/model/award.go +++ b/model/award.go @@ -5,8 +5,10 @@ package model +import "sort" + type Award struct { - Id int + Id int64 `db:"id"` Type AwardType AwardName string TeamId int @@ -22,41 +24,49 @@ const ( ) func (database *Database) CreateAward(award *Award) error { - return database.awardMap.Insert(award) + return database.tables[Award{}].create(award) } -func (database *Database) GetAwardById(id int) (*Award, error) { - award := new(Award) - err := database.awardMap.Get(award, id) - if err != nil && err.Error() == "sql: no rows in result set" { - award = nil - err = nil - } +func (database *Database) GetAwardById(id int64) (*Award, error) { + var award *Award + err := database.tables[Award{}].getById(id, &award) return award, err } -func (database *Database) SaveAward(award *Award) error { - _, err := database.awardMap.Update(award) - return err +func (database *Database) UpdateAward(award *Award) error { + return database.tables[Award{}].update(award) } -func (database *Database) DeleteAward(award *Award) error { - _, err := database.awardMap.Delete(award) - return err +func (database *Database) DeleteAward(id int64) error { + return database.tables[Award{}].delete(id) } func (database *Database) TruncateAwards() error { - return database.awardMap.TruncateTables() + return database.tables[Award{}].truncate() } func (database *Database) GetAllAwards() ([]Award, error) { var awards []Award - err := database.awardMap.Select(&awards, "SELECT * FROM awards ORDER BY id") - return awards, err + if err := database.tables[Award{}].getAll(&awards); err != nil { + return nil, err + } + sort.Slice(awards, func(i, j int) bool { + return awards[i].Id < awards[j].Id + }) + return awards, nil } func (database *Database) GetAwardsByType(awardType AwardType) ([]Award, error) { - var awards []Award - err := database.awardMap.Select(&awards, "SELECT * FROM awards WHERE type = ? ORDER BY id", awardType) - return awards, err + awards, err := database.GetAllAwards() + if err != nil { + return nil, err + } + + var matchingAwards []Award + for _, award := range awards { + if award.Type == awardType { + matchingAwards = append(matchingAwards, award) + } + } + return matchingAwards, nil } diff --git a/model/award_test.go b/model/award_test.go index 2e487cd..f4af7e8 100644 --- a/model/award_test.go +++ b/model/award_test.go @@ -10,6 +10,7 @@ import ( func TestGetNonexistentAward(t *testing.T) { db := setupTestDb(t) + defer db.Close() award, err := db.GetAwardById(1114) assert.Nil(t, err) @@ -18,15 +19,17 @@ func TestGetNonexistentAward(t *testing.T) { func TestAwardCrud(t *testing.T) { db := setupTestDb(t) + defer db.Close() award := Award{0, JudgedAward, "Saftey Award", 254, ""} - db.CreateAward(&award) + assert.Nil(t, db.CreateAward(&award)) award2, err := db.GetAwardById(1) assert.Nil(t, err) assert.Equal(t, award, *award2) + award2.Id = 0 award2.AwardName = "Spirit Award" - db.CreateAward(award2) + assert.Nil(t, db.CreateAward(award2)) awards, err := db.GetAllAwards() assert.Nil(t, err) if assert.Equal(t, 2, len(awards)) { @@ -36,13 +39,13 @@ func TestAwardCrud(t *testing.T) { award.TeamId = 0 award.PersonName = "Travus Cubington" - db.SaveAward(&award) + assert.Nil(t, db.UpdateAward(&award)) award2, err = db.GetAwardById(1) assert.Nil(t, err) assert.Equal(t, award.TeamId, award2.TeamId) assert.Equal(t, award.PersonName, award2.PersonName) - db.DeleteAward(&award) + assert.Nil(t, db.DeleteAward(award.Id)) award2, err = db.GetAwardById(1) assert.Nil(t, err) assert.Nil(t, award2) @@ -50,6 +53,7 @@ func TestAwardCrud(t *testing.T) { func TestTruncateAwards(t *testing.T) { db := setupTestDb(t) + defer db.Close() award := Award{0, JudgedAward, "Saftey Award", 254, ""} db.CreateAward(&award) @@ -61,6 +65,7 @@ func TestTruncateAwards(t *testing.T) { func TestGetAwardsByType(t *testing.T) { db := setupTestDb(t) + defer db.Close() award1 := Award{0, WinnerAward, "Event Winner", 1114, ""} db.CreateAward(&award1) diff --git a/model/database.go b/model/database.go index 4d119a4..e184457 100644 --- a/model/database.go +++ b/model/database.go @@ -14,7 +14,6 @@ import ( _ "github.com/mattn/go-sqlite3" "go.etcd.io/bbolt" "io" - "log" "os" "path/filepath" "strings" @@ -25,7 +24,11 @@ const backupsDir = "db/backups" const migrationsDir = "db/migrations" var BaseDir = "." // Mutable for testing -var recordTypes = []interface{}{} +var recordTypes = []interface{}{ + AllianceTeam{}, + Award{}, + LowerThird{}, +} type Database struct { Path string @@ -35,11 +38,8 @@ type Database struct { matchResultMap *modl.DbMap rankingMap *modl.DbMap teamMap *modl.DbMap - allianceTeamMap *modl.DbMap - lowerThirdMap *modl.DbMap sponsorSlideMap *modl.DbMap scheduleBlockMap *modl.DbMap - awardMap *modl.DbMap userSessionMap *modl.DbMap bolt *bbolt.DB tables map[interface{}]*table @@ -87,11 +87,9 @@ func OpenDatabase(filename string) (*Database, error) { return &database, nil } -func (database *Database) Close() { +func (database *Database) Close() error { database.db.Close() - if err := database.bolt.Close(); err != nil { - log.Println(err) - } + return database.bolt.Close() } // Creates a copy of the current database and saves it to the backups directory. @@ -138,21 +136,12 @@ func (database *Database) mapTables() { database.teamMap = modl.NewDbMap(database.db, dialect) database.teamMap.AddTableWithName(Team{}, "teams").SetKeys(false, "Id") - database.allianceTeamMap = modl.NewDbMap(database.db, dialect) - database.allianceTeamMap.AddTableWithName(AllianceTeam{}, "alliance_teams").SetKeys(true, "Id") - - database.lowerThirdMap = modl.NewDbMap(database.db, dialect) - database.lowerThirdMap.AddTableWithName(LowerThird{}, "lower_thirds").SetKeys(true, "Id") - database.sponsorSlideMap = modl.NewDbMap(database.db, dialect) database.sponsorSlideMap.AddTableWithName(SponsorSlide{}, "sponsor_slides").SetKeys(true, "Id") database.scheduleBlockMap = modl.NewDbMap(database.db, dialect) database.scheduleBlockMap.AddTableWithName(ScheduleBlock{}, "schedule_blocks").SetKeys(true, "Id") - database.awardMap = modl.NewDbMap(database.db, dialect) - database.awardMap.AddTableWithName(Award{}, "awards").SetKeys(true, "Id") - database.userSessionMap = modl.NewDbMap(database.db, dialect) database.userSessionMap.AddTableWithName(UserSession{}, "user_sessions").SetKeys(true, "Id") } diff --git a/model/event_settings_test.go b/model/event_settings_test.go index 18227e4..d1d7cd6 100644 --- a/model/event_settings_test.go +++ b/model/event_settings_test.go @@ -10,6 +10,7 @@ import ( func TestEventSettingsReadWrite(t *testing.T) { db := setupTestDb(t) + defer db.Close() eventSettings, err := db.GetEventSettings() assert.Nil(t, err) diff --git a/model/lower_third.go b/model/lower_third.go index 0ccbf17..f1c2a3b 100644 --- a/model/lower_third.go +++ b/model/lower_third.go @@ -5,57 +5,73 @@ package model +import ( + "sort" +) + type LowerThird struct { - Id int + Id int64 `db:"id"` TopText string BottomText string DisplayOrder int - AwardId int + AwardId int64 } func (database *Database) CreateLowerThird(lowerThird *LowerThird) error { - return database.lowerThirdMap.Insert(lowerThird) + return database.tables[LowerThird{}].create(lowerThird) } -func (database *Database) GetLowerThirdById(id int) (*LowerThird, error) { - lowerThird := new(LowerThird) - err := database.lowerThirdMap.Get(lowerThird, id) - if err != nil && err.Error() == "sql: no rows in result set" { - lowerThird = nil - err = nil - } +func (database *Database) GetLowerThirdById(id int64) (*LowerThird, error) { + var lowerThird *LowerThird + err := database.tables[LowerThird{}].getById(id, &lowerThird) return lowerThird, err } -func (database *Database) SaveLowerThird(lowerThird *LowerThird) error { - _, err := database.lowerThirdMap.Update(lowerThird) - return err +func (database *Database) UpdateLowerThird(lowerThird *LowerThird) error { + return database.tables[LowerThird{}].update(lowerThird) } -func (database *Database) DeleteLowerThird(lowerThird *LowerThird) error { - _, err := database.lowerThirdMap.Delete(lowerThird) - return err +func (database *Database) DeleteLowerThird(id int64) error { + return database.tables[LowerThird{}].delete(id) } func (database *Database) TruncateLowerThirds() error { - return database.lowerThirdMap.TruncateTables() + return database.tables[LowerThird{}].truncate() } func (database *Database) GetAllLowerThirds() ([]LowerThird, error) { var lowerThirds []LowerThird - err := database.lowerThirdMap.Select(&lowerThirds, "SELECT * FROM lower_thirds ORDER BY displayorder") - return lowerThirds, err + if err := database.tables[LowerThird{}].getAll(&lowerThirds); err != nil { + return nil, err + } + sort.Slice(lowerThirds, func(i, j int) bool { + return lowerThirds[i].DisplayOrder < lowerThirds[j].DisplayOrder + }) + return lowerThirds, nil } -func (database *Database) GetLowerThirdsByAwardId(awardId int) ([]LowerThird, error) { - var lowerThirds []LowerThird - err := database.lowerThirdMap.Select(&lowerThirds, "SELECT * FROM lower_thirds WHERE awardid = ? ORDER BY id", - awardId) - return lowerThirds, err +func (database *Database) GetLowerThirdsByAwardId(awardId int64) ([]LowerThird, error) { + lowerThirds, err := database.GetAllLowerThirds() + if err != nil { + return nil, err + } + + var matchingLowerThirds []LowerThird + for _, lowerThird := range lowerThirds { + if lowerThird.AwardId == awardId { + matchingLowerThirds = append(matchingLowerThirds, lowerThird) + } + } + return matchingLowerThirds, nil } func (database *Database) GetNextLowerThirdDisplayOrder() int { - var count int - _ = database.lowerThirdMap.SelectOne(&count, "SELECT MAX(displayorder) + 1 FROM lower_thirds") - return count + lowerThirds, err := database.GetAllLowerThirds() + if err != nil { + return 0 + } + if len(lowerThirds) == 0 { + return 1 + } + return lowerThirds[len(lowerThirds)-1].DisplayOrder + 1 } diff --git a/model/lower_third_test.go b/model/lower_third_test.go index 483c5f7..76870d5 100644 --- a/model/lower_third_test.go +++ b/model/lower_third_test.go @@ -10,6 +10,7 @@ import ( func TestGetNonexistentLowerThird(t *testing.T) { db := setupTestDb(t) + defer db.Close() lowerThird, err := db.GetLowerThirdById(1114) assert.Nil(t, err) @@ -18,20 +19,29 @@ func TestGetNonexistentLowerThird(t *testing.T) { func TestLowerThirdCrud(t *testing.T) { db := setupTestDb(t) + defer db.Close() - lowerThird := LowerThird{0, "Top Text", "Bottom Text", 0, 0} - db.CreateLowerThird(&lowerThird) + lowerThirds, err := db.GetAllLowerThirds() + assert.Nil(t, err) + assert.Equal(t, 0, len(lowerThirds)) + + lowerThird := LowerThird{0, "Top Text", "Bottom Text", 1, 0} + assert.Nil(t, db.CreateLowerThird(&lowerThird)) lowerThird2, err := db.GetLowerThirdById(1) assert.Nil(t, err) assert.Equal(t, lowerThird, *lowerThird2) lowerThird.BottomText = "Blorpy" - db.SaveLowerThird(&lowerThird) + assert.Nil(t, db.UpdateLowerThird(&lowerThird)) lowerThird2, err = db.GetLowerThirdById(1) assert.Nil(t, err) assert.Equal(t, lowerThird.BottomText, lowerThird2.BottomText) - db.DeleteLowerThird(&lowerThird) + lowerThirds, err = db.GetAllLowerThirds() + assert.Nil(t, err) + assert.Equal(t, 1, len(lowerThirds)) + + assert.Nil(t, db.DeleteLowerThird(lowerThird.Id)) lowerThird2, err = db.GetLowerThirdById(1) assert.Nil(t, err) assert.Nil(t, lowerThird2) @@ -39,10 +49,11 @@ func TestLowerThirdCrud(t *testing.T) { func TestTruncateLowerThirds(t *testing.T) { db := setupTestDb(t) + defer db.Close() lowerThird := LowerThird{0, "Top Text", "Bottom Text", 0, 0} - db.CreateLowerThird(&lowerThird) - db.TruncateLowerThirds() + assert.Nil(t, db.CreateLowerThird(&lowerThird)) + assert.Nil(t, db.TruncateLowerThirds()) lowerThird2, err := db.GetLowerThirdById(1) assert.Nil(t, err) assert.Nil(t, lowerThird2) @@ -50,18 +61,25 @@ func TestTruncateLowerThirds(t *testing.T) { func TestGetLowerThirdsByAwardId(t *testing.T) { db := setupTestDb(t) - lowerThird1 := LowerThird{0, "Top Text", "Bottom Text", 0, 0} - db.CreateLowerThird(&lowerThird1) - lowerThird2 := LowerThird{0, "Award 1", "", 1, 5} - db.CreateLowerThird(&lowerThird2) - lowerThird3 := LowerThird{0, "Award 2", "", 2, 2} - db.CreateLowerThird(&lowerThird3) - lowerThird4 := LowerThird{0, "Award 1", "Award 1 Winner", 3, 5} - db.CreateLowerThird(&lowerThird4) - nextDisplayOrder := db.GetNextLowerThirdDisplayOrder() - assert.Equal(t, 4, nextDisplayOrder) + defer db.Close() - lowerThirds, err := db.GetLowerThirdsByAwardId(5) + nextDisplayOrder := db.GetNextLowerThirdDisplayOrder() + assert.Equal(t, 1, nextDisplayOrder) + lowerThird1 := LowerThird{0, "Top Text", "Bottom Text", 1, 0} + assert.Nil(t, db.CreateLowerThird(&lowerThird1)) + lowerThird2 := LowerThird{0, "Award 1", "", 2, 5} + assert.Nil(t, db.CreateLowerThird(&lowerThird2)) + lowerThird3 := LowerThird{0, "Award 2", "", 3, 2} + assert.Nil(t, db.CreateLowerThird(&lowerThird3)) + lowerThird4 := LowerThird{0, "Award 1", "Award 1 Winner", 4, 5} + assert.Nil(t, db.CreateLowerThird(&lowerThird4)) + lowerThirds, err := db.GetAllLowerThirds() + assert.Nil(t, err) + assert.Equal(t, 4, len(lowerThirds)) + nextDisplayOrder = db.GetNextLowerThirdDisplayOrder() + assert.Equal(t, 5, nextDisplayOrder) + + lowerThirds, err = db.GetLowerThirdsByAwardId(5) assert.Nil(t, err) if assert.Equal(t, 2, len(lowerThirds)) { assert.Equal(t, lowerThird2, lowerThirds[0]) @@ -72,4 +90,7 @@ func TestGetLowerThirdsByAwardId(t *testing.T) { if assert.Equal(t, 1, len(lowerThirds)) { assert.Equal(t, lowerThird3, lowerThirds[0]) } + lowerThirds, err = db.GetLowerThirdsByAwardId(39) + assert.Nil(t, err) + assert.Equal(t, 0, len(lowerThirds)) } diff --git a/model/match_result_test.go b/model/match_result_test.go index 6a42c84..588a239 100644 --- a/model/match_result_test.go +++ b/model/match_result_test.go @@ -10,6 +10,7 @@ import ( func TestGetNonexistentMatchResult(t *testing.T) { db := setupTestDb(t) + defer db.Close() match, err := db.GetMatchResultForMatch(1114) assert.Nil(t, err) @@ -18,9 +19,10 @@ func TestGetNonexistentMatchResult(t *testing.T) { func TestMatchResultCrud(t *testing.T) { db := setupTestDb(t) + defer db.Close() matchResult := BuildTestMatchResult(254, 5) - db.CreateMatchResult(matchResult) + assert.Nil(t, db.CreateMatchResult(matchResult)) matchResult2, err := db.GetMatchResultForMatch(254) assert.Nil(t, err) assert.Equal(t, matchResult, matchResult2) @@ -38,6 +40,7 @@ func TestMatchResultCrud(t *testing.T) { func TestTruncateMatchResults(t *testing.T) { db := setupTestDb(t) + defer db.Close() matchResult := BuildTestMatchResult(254, 1) db.CreateMatchResult(matchResult) @@ -49,6 +52,7 @@ func TestTruncateMatchResults(t *testing.T) { func TestGetMatchResultForMatch(t *testing.T) { db := setupTestDb(t) + defer db.Close() matchResult := BuildTestMatchResult(254, 2) db.CreateMatchResult(matchResult) diff --git a/model/match_test.go b/model/match_test.go index 0971ffd..f508680 100644 --- a/model/match_test.go +++ b/model/match_test.go @@ -11,6 +11,7 @@ import ( func TestGetNonexistentMatch(t *testing.T) { db := setupTestDb(t) + defer db.Close() match, err := db.GetMatchById(1114) assert.Nil(t, err) @@ -19,6 +20,7 @@ func TestGetNonexistentMatch(t *testing.T) { func TestMatchCrud(t *testing.T) { db := setupTestDb(t) + defer db.Close() match := Match{0, "qualification", "254", time.Now().UTC(), 0, 0, 0, 0, 0, 1, false, 2, false, 3, false, 4, false, 5, false, 6, false, time.Now().UTC(), time.Now().UTC(), MatchNotPlayed} @@ -44,6 +46,7 @@ func TestMatchCrud(t *testing.T) { func TestTruncateMatches(t *testing.T) { db := setupTestDb(t) + defer db.Close() match := Match{0, "qualification", "254", time.Now().UTC(), 0, 0, 0, 0, 0, 1, false, 2, false, 3, false, 4, false, 5, false, 6, false, time.Now().UTC(), time.Now().UTC(), MatchNotPlayed} @@ -56,6 +59,7 @@ func TestTruncateMatches(t *testing.T) { func TestGetMatchesByElimRoundGroup(t *testing.T) { db := setupTestDb(t) + defer db.Close() match := Match{Type: "elimination", DisplayName: "SF1-1", ElimRound: 2, ElimGroup: 1, ElimInstance: 1, ElimRedAlliance: 8, ElimBlueAlliance: 4} @@ -85,6 +89,7 @@ func TestGetMatchesByElimRoundGroup(t *testing.T) { func TestGetMatchesByType(t *testing.T) { db := setupTestDb(t) + defer db.Close() match := Match{0, "qualification", "1", time.Now().UTC(), 0, 0, 0, 0, 0, 1, false, 2, false, 3, false, 4, false, 5, false, 6, false, time.Now().UTC(), time.Now().UTC(), MatchNotPlayed} diff --git a/model/ranking_test.go b/model/ranking_test.go index 289d5b5..effc9c9 100644 --- a/model/ranking_test.go +++ b/model/ranking_test.go @@ -11,6 +11,7 @@ import ( func TestGetNonexistentRanking(t *testing.T) { db := setupTestDb(t) + defer db.Close() ranking, err := db.GetRankingForTeam(1114) assert.Nil(t, err) @@ -19,9 +20,10 @@ func TestGetNonexistentRanking(t *testing.T) { func TestRankingCrud(t *testing.T) { db := setupTestDb(t) + defer db.Close() ranking := game.TestRanking1() - db.CreateRanking(ranking) + assert.Nil(t, db.CreateRanking(ranking)) ranking2, err := db.GetRankingForTeam(254) assert.Nil(t, err) assert.Equal(t, ranking, ranking2) @@ -31,15 +33,11 @@ func TestRankingCrud(t *testing.T) { ranking2, err = db.GetRankingForTeam(254) assert.Nil(t, err) assert.Equal(t, ranking.Random, ranking2.Random) - - db.DeleteRanking(ranking) - ranking2, err = db.GetRankingForTeam(254) - assert.Nil(t, err) - assert.Nil(t, ranking2) } func TestTruncateRankings(t *testing.T) { db := setupTestDb(t) + defer db.Close() ranking := game.TestRanking1() db.CreateRanking(ranking) @@ -51,6 +49,7 @@ func TestTruncateRankings(t *testing.T) { func TestGetAllRankings(t *testing.T) { db := setupTestDb(t) + defer db.Close() rankings, err := db.GetAllRankings() assert.Nil(t, err) @@ -58,7 +57,7 @@ func TestGetAllRankings(t *testing.T) { numRankings := 20 for i := 1; i <= numRankings; i++ { - db.CreateRanking(&game.Ranking{TeamId: i}) + assert.Nil(t, db.CreateRanking(&game.Ranking{TeamId: i, Rank: i})) } rankings, err = db.GetAllRankings() assert.Nil(t, err) diff --git a/model/schedule_block_test.go b/model/schedule_block_test.go index d5439c0..ee539eb 100644 --- a/model/schedule_block_test.go +++ b/model/schedule_block_test.go @@ -11,6 +11,7 @@ import ( func TestScheduleBlockCrud(t *testing.T) { db := setupTestDb(t) + defer db.Close() scheduleBlock1 := ScheduleBlock{0, "practice", time.Now().UTC(), 10, 600} assert.Nil(t, db.CreateScheduleBlock(&scheduleBlock1)) diff --git a/model/sponsor_slide_test.go b/model/sponsor_slide_test.go index b1c150d..7bfcbeb 100644 --- a/model/sponsor_slide_test.go +++ b/model/sponsor_slide_test.go @@ -10,6 +10,7 @@ import ( func TestGetNonexistentSponsorSlide(t *testing.T) { db := setupTestDb(t) + defer db.Close() sponsorSlide, err := db.GetSponsorSlideById(1114) assert.Nil(t, err) @@ -18,11 +19,12 @@ func TestGetNonexistentSponsorSlide(t *testing.T) { func TestSponsorSlideCrud(t *testing.T) { db := setupTestDb(t) + defer db.Close() assert.Equal(t, 0, db.GetNextSponsorSlideDisplayOrder()) sponsorSlide := SponsorSlide{0, "Subtitle", "Line 1", "Line 2", "", 10, 0} - db.CreateSponsorSlide(&sponsorSlide) + assert.Nil(t, db.CreateSponsorSlide(&sponsorSlide)) sponsorSlide2, err := db.GetSponsorSlideById(1) assert.Nil(t, err) assert.Equal(t, sponsorSlide, *sponsorSlide2) @@ -42,6 +44,7 @@ func TestSponsorSlideCrud(t *testing.T) { func TestTruncateSponsorSlides(t *testing.T) { db := setupTestDb(t) + defer db.Close() sponsorSlide := SponsorSlide{0, "Subtitle", "Line 1", "Line 2", "", 10, 0} db.CreateSponsorSlide(&sponsorSlide) diff --git a/model/team_test.go b/model/team_test.go index 0421bea..a3eeb38 100644 --- a/model/team_test.go +++ b/model/team_test.go @@ -10,6 +10,7 @@ import ( func TestGetNonexistentTeam(t *testing.T) { db := setupTestDb(t) + defer db.Close() team, err := db.GetTeamById(1114) assert.Nil(t, err) @@ -18,6 +19,7 @@ func TestGetNonexistentTeam(t *testing.T) { func TestTeamCrud(t *testing.T) { db := setupTestDb(t) + defer db.Close() team := Team{Id: 254, Name: "NASA", Nickname: "The Cheesy Poofs", City: "San Jose", StateProv: "CA", Country: "USA", RookieYear: 1999, RobotName: "Barrage"} @@ -40,6 +42,7 @@ func TestTeamCrud(t *testing.T) { func TestTruncateTeams(t *testing.T) { db := setupTestDb(t) + defer db.Close() team := Team{Id: 254, Name: "NASA", Nickname: "The Cheesy Poofs", City: "San Jose", StateProv: "CA", Country: "USA", RookieYear: 1999, RobotName: "Barrage"} @@ -52,6 +55,7 @@ func TestTruncateTeams(t *testing.T) { func TestGetAllTeams(t *testing.T) { db := setupTestDb(t) + defer db.Close() teams, err := db.GetAllTeams() assert.Nil(t, err) diff --git a/model/user_session_test.go b/model/user_session_test.go index 24a9d4a..7ac5444 100644 --- a/model/user_session_test.go +++ b/model/user_session_test.go @@ -11,6 +11,7 @@ import ( func TestGetNonexistentUserSession(t *testing.T) { db := setupTestDb(t) + defer db.Close() session, err := db.GetUserSessionByToken("blorpy") assert.Nil(t, err) @@ -19,6 +20,7 @@ func TestGetNonexistentUserSession(t *testing.T) { func TestUserSessionCrud(t *testing.T) { db := setupTestDb(t) + defer db.Close() session := UserSession{0, "token1", "Bertha", time.Now()} err := db.CreateUserSession(&session) @@ -37,6 +39,7 @@ func TestUserSessionCrud(t *testing.T) { func TestTruncateUserSessions(t *testing.T) { db := setupTestDb(t) + defer db.Close() session := UserSession{0, "token1", "Bertha", time.Now()} db.CreateUserSession(&session) diff --git a/tournament/awards.go b/tournament/awards.go index 50c483c..981289f 100644 --- a/tournament/awards.go +++ b/tournament/awards.go @@ -28,7 +28,7 @@ func CreateOrUpdateAward(database *model.Database, award *model.Award, createInt if award.Id == 0 { err = database.CreateAward(award) } else { - err = database.SaveAward(award) + err = database.UpdateAward(award) } if err != nil { return err @@ -68,26 +68,18 @@ func CreateOrUpdateAward(database *model.Database, award *model.Award, createInt } // Deletes the given award and any associated lower thirds. -func DeleteAward(database *model.Database, awardId int) error { - var award *model.Award - award, err := database.GetAwardById(awardId) - if err != nil { - return err - } - if award == nil { - return fmt.Errorf("Award with ID %d does not exist.", awardId) - } - if err = database.DeleteAward(award); err != nil { +func DeleteAward(database *model.Database, awardId int64) error { + if err := database.DeleteAward(awardId); err != nil { return err } // Delete lower thirds. - lowerThirds, err := database.GetLowerThirdsByAwardId(award.Id) + lowerThirds, err := database.GetLowerThirdsByAwardId(awardId) if err != nil { return err } for _, lowerThird := range lowerThirds { - if err = database.DeleteLowerThird(&lowerThird); err != nil { + if err = database.DeleteLowerThird(lowerThird.Id); err != nil { return err } } @@ -160,7 +152,7 @@ func createOrUpdateAwardLowerThird(database *model.Database, lowerThird *model.L if index < len(existingLowerThirds) { lowerThird.Id = existingLowerThirds[index].Id lowerThird.DisplayOrder = existingLowerThirds[index].DisplayOrder - return database.SaveLowerThird(lowerThird) + return database.UpdateLowerThird(lowerThird) } else { lowerThird.DisplayOrder = database.GetNextLowerThirdDisplayOrder() return database.CreateLowerThird(lowerThird) diff --git a/tournament/awards_test.go b/tournament/awards_test.go index 712d027..216b2dc 100644 --- a/tournament/awards_test.go +++ b/tournament/awards_test.go @@ -125,12 +125,12 @@ func TestCreateOrUpdateWinnerAndFinalistAwards(t *testing.T) { assert.Nil(t, err) awards, _ = database.GetAllAwards() if assert.Equal(t, 6, len(awards)) { - assert.Equal(t, model.Award{1, model.FinalistAward, "Finalist", 2, ""}, awards[0]) - assert.Equal(t, model.Award{2, model.FinalistAward, "Finalist", 20, ""}, awards[1]) - assert.Equal(t, model.Award{3, model.FinalistAward, "Finalist", 200, ""}, awards[2]) - assert.Equal(t, model.Award{4, model.WinnerAward, "Winner", 1, ""}, awards[3]) - assert.Equal(t, model.Award{5, model.WinnerAward, "Winner", 10, ""}, awards[4]) - assert.Equal(t, model.Award{6, model.WinnerAward, "Winner", 100, ""}, awards[5]) + assert.Equal(t, model.Award{7, model.FinalistAward, "Finalist", 2, ""}, awards[0]) + assert.Equal(t, model.Award{8, model.FinalistAward, "Finalist", 20, ""}, awards[1]) + assert.Equal(t, model.Award{9, model.FinalistAward, "Finalist", 200, ""}, awards[2]) + assert.Equal(t, model.Award{10, model.WinnerAward, "Winner", 1, ""}, awards[3]) + assert.Equal(t, model.Award{11, model.WinnerAward, "Winner", 10, ""}, awards[4]) + assert.Equal(t, model.Award{12, model.WinnerAward, "Winner", 100, ""}, awards[5]) } lowerThirds, _ = database.GetAllLowerThirds() if assert.Equal(t, 8, len(lowerThirds)) { diff --git a/web/setup_awards.go b/web/setup_awards.go index 4f723b6..3dee6d0 100644 --- a/web/setup_awards.go +++ b/web/setup_awards.go @@ -55,7 +55,7 @@ func (web *Web) awardsPostHandler(w http.ResponseWriter, r *http.Request) { return } - awardId, _ := strconv.Atoi(r.PostFormValue("id")) + awardId, _ := strconv.ParseInt(r.PostFormValue("id"), 10, 64) if r.PostFormValue("action") == "delete" { if err := tournament.DeleteAward(web.arena.Database, awardId); err != nil { handleWebErr(w, err) diff --git a/web/setup_lower_thirds.go b/web/setup_lower_thirds.go index c3b9f67..0d8df0a 100644 --- a/web/setup_lower_thirds.go +++ b/web/setup_lower_thirds.go @@ -83,7 +83,7 @@ func (web *Web) lowerThirdsWebsocketHandler(w http.ResponseWriter, r *http.Reque ws.WriteError(err.Error()) continue } - err = web.arena.Database.DeleteLowerThird(&lowerThird) + err = web.arena.Database.DeleteLowerThird(lowerThird.Id) if err != nil { ws.WriteError(err.Error()) continue @@ -113,7 +113,7 @@ func (web *Web) lowerThirdsWebsocketHandler(w http.ResponseWriter, r *http.Reque continue case "reorderLowerThird": args := struct { - Id int + Id int64 MoveUp bool }{} err = mapstructure.Decode(data, &args) @@ -151,7 +151,7 @@ func (web *Web) saveLowerThird(lowerThird *model.LowerThird) error { lowerThird.DisplayOrder = web.arena.Database.GetNextLowerThirdDisplayOrder() err = web.arena.Database.CreateLowerThird(lowerThird) } else { - err = web.arena.Database.SaveLowerThird(lowerThird) + err = web.arena.Database.UpdateLowerThird(lowerThird) } if err != nil { return err @@ -160,7 +160,7 @@ func (web *Web) saveLowerThird(lowerThird *model.LowerThird) error { } // Swaps the lower third having the given ID with the one immediately above or below it. -func (web *Web) reorderLowerThird(id int, moveUp bool) error { +func (web *Web) reorderLowerThird(id int64, moveUp bool) error { lowerThird, err := web.arena.Database.GetLowerThirdById(id) if err != nil { return err @@ -195,11 +195,11 @@ func (web *Web) reorderLowerThird(id int, moveUp bool) error { // Swap their display orders and save. lowerThird.DisplayOrder, adjacentLowerThird.DisplayOrder = adjacentLowerThird.DisplayOrder, lowerThird.DisplayOrder - err = web.arena.Database.SaveLowerThird(lowerThird) + err = web.arena.Database.UpdateLowerThird(lowerThird) if err != nil { return err } - err = web.arena.Database.SaveLowerThird(adjacentLowerThird) + err = web.arena.Database.UpdateLowerThird(adjacentLowerThird) if err != nil { return err } diff --git a/web/setup_lower_thirds_test.go b/web/setup_lower_thirds_test.go index fdde166..3dc89ce 100644 --- a/web/setup_lower_thirds_test.go +++ b/web/setup_lower_thirds_test.go @@ -57,6 +57,6 @@ func TestSetupLowerThirds(t *testing.T) { ws.Write("reorderLowerThird", map[string]interface{}{"Id": 2, "moveUp": false}) time.Sleep(time.Millisecond * 100) lowerThirds, _ := web.arena.Database.GetAllLowerThirds() - assert.Equal(t, 3, lowerThirds[0].Id) - assert.Equal(t, 2, lowerThirds[1].Id) + assert.Equal(t, int64(3), lowerThirds[0].Id) + assert.Equal(t, int64(2), lowerThirds[1].Id) }