diff --git a/database.go b/database.go index c3c6a40..8d83781 100644 --- a/database.go +++ b/database.go @@ -20,6 +20,7 @@ type Database struct { eventSettingsMap *modl.DbMap matchMap *modl.DbMap matchResultMap *modl.DbMap + rankingMap *modl.DbMap teamMap *modl.DbMap } @@ -65,6 +66,9 @@ func (database *Database) mapTables() { database.matchResultMap = modl.NewDbMap(database.db, dialect) database.matchResultMap.AddTableWithName(MatchResultDb{}, "match_results").SetKeys(true, "Id") + database.rankingMap = modl.NewDbMap(database.db, dialect) + database.rankingMap.AddTableWithName(Ranking{}, "rankings").SetKeys(false, "TeamId") + database.teamMap = modl.NewDbMap(database.db, dialect) database.teamMap.AddTableWithName(Team{}, "teams").SetKeys(false, "Id") } diff --git a/db/migrations/20140526225924_CreateRankings.sql b/db/migrations/20140526225924_CreateRankings.sql new file mode 100644 index 0000000..d8a498d --- /dev/null +++ b/db/migrations/20140526225924_CreateRankings.sql @@ -0,0 +1,18 @@ +-- +goose Up +CREATE TABLE rankings ( + teamid INTEGER PRIMARY KEY, + qualificationscore int, + assistpoints int, + autopoints int, + trusscatchpoints int, + goalfoulpoints int, + random REAL, + wins int, + losses int, + ties int, + disqualifications int, + played int +); + +-- +goose Down +DROP TABLE rankings; diff --git a/ranking.go b/ranking.go new file mode 100644 index 0000000..3db8234 --- /dev/null +++ b/ranking.go @@ -0,0 +1,55 @@ +// Copyright 2014 Team 254. All Rights Reserved. +// Author: pat@patfairbank.com (Patrick Fairbank) +// +// Model and datastore CRUD methods for team ranking data at an event. + +package main + +type Ranking struct { + TeamId int + QualificationScore int + AssistPoints int + AutoPoints int + TrussCatchPoints int + GoalFoulPoints int + Random float64 + Wins int + Losses int + Ties int + Disqualifications int + Played int +} + +func (database *Database) CreateRanking(ranking *Ranking) error { + return database.rankingMap.Insert(ranking) +} + +func (database *Database) GetRankingForTeam(teamId int) (*Ranking, error) { + ranking := new(Ranking) + err := database.rankingMap.Get(ranking, teamId) + if err != nil && err.Error() == "sql: no rows in result set" { + ranking = nil + err = nil + } + return ranking, err +} + +func (database *Database) SaveRanking(ranking *Ranking) error { + _, err := database.rankingMap.Update(ranking) + return err +} + +func (database *Database) DeleteRanking(ranking *Ranking) error { + _, err := database.rankingMap.Delete(ranking) + return err +} + +func (database *Database) TruncateRankings() error { + return database.rankingMap.TruncateTables() +} + +func (database *Database) GetAllRankings() ([]Ranking, error) { + var rankings []Ranking + err := database.rankingMap.Select(&rankings, "SELECT * FROM rankings ORDER BY id") + return rankings, err +}