mirror of
https://github.com/Team254/cheesy-arena-lite.git
synced 2026-03-09 21:56:50 -04:00
Added model for alliances.
This commit is contained in:
57
alliance_team.go
Normal file
57
alliance_team.go
Normal file
@@ -0,0 +1,57 @@
|
||||
// Copyright 2014 Team 254. All Rights Reserved.
|
||||
// Author: pat@patfairbank.com (Patrick Fairbank)
|
||||
//
|
||||
// Model and datastore CRUD methods for an alliance-team association.
|
||||
|
||||
package main
|
||||
|
||||
type AllianceTeam struct {
|
||||
Id int
|
||||
AllianceId int
|
||||
PickPosition int
|
||||
TeamId int
|
||||
}
|
||||
|
||||
func (database *Database) CreateAllianceTeam(allianceTeam *AllianceTeam) error {
|
||||
return database.allianceTeamMap.Insert(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
|
||||
}
|
||||
|
||||
func (database *Database) SaveAllianceTeam(allianceTeam *AllianceTeam) error {
|
||||
_, err := database.allianceTeamMap.Update(allianceTeam)
|
||||
return err
|
||||
}
|
||||
|
||||
func (database *Database) DeleteAllianceTeam(allianceTeam *AllianceTeam) error {
|
||||
_, err := database.allianceTeamMap.Delete(allianceTeam)
|
||||
return err
|
||||
}
|
||||
|
||||
func (database *Database) TruncateAllianceTeams() error {
|
||||
return database.allianceTeamMap.TruncateTables()
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
return alliances, err
|
||||
}
|
||||
124
alliance_team_test.go
Normal file
124
alliance_team_test.go
Normal file
@@ -0,0 +1,124 @@
|
||||
// Copyright 2014 Team 254. All Rights Reserved.
|
||||
// Author: pat@patfairbank.com (Patrick Fairbank)
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"github.com/stretchr/testify/assert"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestGetNonexistentAlliance(t *testing.T) {
|
||||
clearDb()
|
||||
defer clearDb()
|
||||
db, err := OpenDatabase(testDbPath)
|
||||
assert.Nil(t, err)
|
||||
defer db.Close()
|
||||
|
||||
allianceTeams, err := db.GetTeamsByAlliance(1114)
|
||||
assert.Nil(t, err)
|
||||
assert.Empty(t, allianceTeams)
|
||||
}
|
||||
|
||||
func TestAllianceTeamCrud(t *testing.T) {
|
||||
clearDb()
|
||||
defer clearDb()
|
||||
db, err := OpenDatabase(testDbPath)
|
||||
assert.Nil(t, err)
|
||||
defer db.Close()
|
||||
|
||||
allianceTeam := AllianceTeam{0, 1, 0, 254}
|
||||
db.CreateAllianceTeam(&allianceTeam)
|
||||
allianceTeams, err := db.GetTeamsByAlliance(1)
|
||||
assert.Nil(t, err)
|
||||
assert.Equal(t, 1, len(allianceTeams))
|
||||
assert.Equal(t, allianceTeam, allianceTeams[0])
|
||||
|
||||
allianceTeam.TeamId = 1114
|
||||
db.SaveAllianceTeam(&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)
|
||||
allianceTeams, err = db.GetTeamsByAlliance(1)
|
||||
assert.Nil(t, err)
|
||||
assert.Empty(t, allianceTeams)
|
||||
}
|
||||
|
||||
func TestGetTeamsByAlliance(t *testing.T) {
|
||||
clearDb()
|
||||
defer clearDb()
|
||||
db, err := OpenDatabase(testDbPath)
|
||||
assert.Nil(t, err)
|
||||
defer db.Close()
|
||||
|
||||
buildTestAlliances(db)
|
||||
allianceTeams, err := db.GetTeamsByAlliance(1)
|
||||
assert.Nil(t, err)
|
||||
if assert.Equal(t, 4, len(allianceTeams)) {
|
||||
assert.Equal(t, 254, allianceTeams[0].TeamId)
|
||||
assert.Equal(t, 469, allianceTeams[1].TeamId)
|
||||
assert.Equal(t, 2848, allianceTeams[2].TeamId)
|
||||
assert.Equal(t, 74, allianceTeams[3].TeamId)
|
||||
}
|
||||
allianceTeams, err = db.GetTeamsByAlliance(2)
|
||||
assert.Nil(t, err)
|
||||
if assert.Equal(t, 2, len(allianceTeams)) {
|
||||
assert.Equal(t, 1718, allianceTeams[0].TeamId)
|
||||
assert.Equal(t, 2451, allianceTeams[1].TeamId)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTruncateAllianceTeams(t *testing.T) {
|
||||
clearDb()
|
||||
defer clearDb()
|
||||
db, err := OpenDatabase(testDbPath)
|
||||
assert.Nil(t, err)
|
||||
defer db.Close()
|
||||
|
||||
allianceTeam := AllianceTeam{0, 1, 0, 254}
|
||||
db.CreateAllianceTeam(&allianceTeam)
|
||||
db.TruncateAllianceTeams()
|
||||
allianceTeams, err := db.GetTeamsByAlliance(1)
|
||||
assert.Nil(t, err)
|
||||
assert.Empty(t, allianceTeams)
|
||||
}
|
||||
|
||||
func TestGetAllAlliances(t *testing.T) {
|
||||
clearDb()
|
||||
defer clearDb()
|
||||
db, err := OpenDatabase(testDbPath)
|
||||
assert.Nil(t, err)
|
||||
defer db.Close()
|
||||
|
||||
alliances, err := db.GetAllAlliances()
|
||||
assert.Nil(t, err)
|
||||
assert.Empty(t, alliances)
|
||||
|
||||
buildTestAlliances(db)
|
||||
alliances, err = db.GetAllAlliances()
|
||||
assert.Nil(t, err)
|
||||
if assert.Equal(t, 2, len(alliances)) {
|
||||
if assert.Equal(t, 4, len(alliances[0])) {
|
||||
assert.Equal(t, 254, alliances[0][0].TeamId)
|
||||
assert.Equal(t, 469, alliances[0][1].TeamId)
|
||||
assert.Equal(t, 2848, alliances[0][2].TeamId)
|
||||
assert.Equal(t, 74, alliances[0][3].TeamId)
|
||||
}
|
||||
if assert.Equal(t, 2, len(alliances[1])) {
|
||||
assert.Equal(t, 1718, alliances[1][0].TeamId)
|
||||
assert.Equal(t, 2451, alliances[1][1].TeamId)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func buildTestAlliances(db *Database) {
|
||||
db.CreateAllianceTeam(&AllianceTeam{0, 2, 0, 1718})
|
||||
db.CreateAllianceTeam(&AllianceTeam{0, 1, 3, 74})
|
||||
db.CreateAllianceTeam(&AllianceTeam{0, 1, 1, 469})
|
||||
db.CreateAllianceTeam(&AllianceTeam{0, 1, 0, 254})
|
||||
db.CreateAllianceTeam(&AllianceTeam{0, 1, 2, 2848})
|
||||
db.CreateAllianceTeam(&AllianceTeam{0, 2, 1, 2451})
|
||||
}
|
||||
@@ -22,6 +22,7 @@ type Database struct {
|
||||
matchResultMap *modl.DbMap
|
||||
rankingMap *modl.DbMap
|
||||
teamMap *modl.DbMap
|
||||
allianceTeamMap *modl.DbMap
|
||||
}
|
||||
|
||||
// Opens the SQLite database at the given path, creating it if it doesn't exist, and runs any pending
|
||||
@@ -71,4 +72,7 @@ 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")
|
||||
}
|
||||
|
||||
12
db/migrations/20140531205700_CreateAllianceTeams.sql
Normal file
12
db/migrations/20140531205700_CreateAllianceTeams.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
-- +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);
|
||||
CREATE UNIQUE INDEX team ON alliance_teams(teamid);
|
||||
|
||||
-- +goose Down
|
||||
DROP TABLE alliance_teams;
|
||||
Reference in New Issue
Block a user