2014-05-24 18:52:10 -07:00
|
|
|
// Copyright 2014 Team 254. All Rights Reserved.
|
|
|
|
|
// Author: pat@patfairbank.com (Patrick Fairbank)
|
|
|
|
|
//
|
|
|
|
|
// Model and datastore CRUD methods for a match at an event.
|
|
|
|
|
|
|
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
import (
|
2016-08-28 00:49:52 -07:00
|
|
|
"fmt"
|
2014-07-27 16:41:09 -07:00
|
|
|
"strings"
|
2014-05-24 18:52:10 -07:00
|
|
|
"time"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Match struct {
|
|
|
|
|
Id int
|
|
|
|
|
Type string
|
|
|
|
|
DisplayName string
|
|
|
|
|
Time time.Time
|
2014-06-01 22:21:00 -07:00
|
|
|
ElimRound int
|
2015-05-30 23:58:42 -07:00
|
|
|
ElimGroup int
|
2014-06-01 22:21:00 -07:00
|
|
|
ElimInstance int
|
2014-05-24 18:52:10 -07:00
|
|
|
Red1 int
|
|
|
|
|
Red1IsSurrogate bool
|
|
|
|
|
Red2 int
|
|
|
|
|
Red2IsSurrogate bool
|
|
|
|
|
Red3 int
|
|
|
|
|
Red3IsSurrogate bool
|
|
|
|
|
Blue1 int
|
|
|
|
|
Blue1IsSurrogate bool
|
|
|
|
|
Blue2 int
|
|
|
|
|
Blue2IsSurrogate bool
|
|
|
|
|
Blue3 int
|
|
|
|
|
Blue3IsSurrogate bool
|
|
|
|
|
Status string
|
|
|
|
|
StartedAt time.Time
|
2015-05-30 23:58:42 -07:00
|
|
|
Winner string
|
2014-05-24 18:52:10 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (database *Database) CreateMatch(match *Match) error {
|
|
|
|
|
return database.matchMap.Insert(match)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (database *Database) GetMatchById(id int) (*Match, error) {
|
|
|
|
|
match := new(Match)
|
|
|
|
|
err := database.matchMap.Get(match, id)
|
|
|
|
|
if err != nil && err.Error() == "sql: no rows in result set" {
|
|
|
|
|
match = nil
|
|
|
|
|
err = nil
|
|
|
|
|
}
|
|
|
|
|
return match, err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (database *Database) SaveMatch(match *Match) error {
|
|
|
|
|
_, err := database.matchMap.Update(match)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (database *Database) DeleteMatch(match *Match) error {
|
|
|
|
|
_, err := database.matchMap.Delete(match)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (database *Database) TruncateMatches() error {
|
|
|
|
|
return database.matchMap.TruncateTables()
|
|
|
|
|
}
|
2014-05-26 16:39:20 -07:00
|
|
|
|
2014-06-01 22:21:00 -07:00
|
|
|
func (database *Database) GetMatchByName(matchType string, displayName string) (*Match, error) {
|
|
|
|
|
var matches []Match
|
|
|
|
|
err := database.teamMap.Select(&matches, "SELECT * FROM matches WHERE type = ? AND displayname = ?",
|
|
|
|
|
matchType, displayName)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
if len(matches) == 0 {
|
|
|
|
|
return nil, nil
|
|
|
|
|
}
|
|
|
|
|
return &matches[0], err
|
|
|
|
|
}
|
|
|
|
|
|
2015-05-30 23:58:42 -07:00
|
|
|
func (database *Database) GetMatchesByElimRoundGroup(round int, group int) ([]Match, error) {
|
2014-06-01 22:21:00 -07:00
|
|
|
var matches []Match
|
|
|
|
|
err := database.teamMap.Select(&matches, "SELECT * FROM matches WHERE type = 'elimination' AND "+
|
2015-05-30 23:58:42 -07:00
|
|
|
"elimround = ? AND elimgroup = ? ORDER BY eliminstance", round, group)
|
2014-06-01 22:21:00 -07:00
|
|
|
return matches, err
|
|
|
|
|
}
|
|
|
|
|
|
2014-05-26 16:39:20 -07:00
|
|
|
func (database *Database) GetMatchesByType(matchType string) ([]Match, error) {
|
|
|
|
|
var matches []Match
|
2014-06-01 22:21:00 -07:00
|
|
|
err := database.teamMap.Select(&matches,
|
2015-05-30 23:58:42 -07:00
|
|
|
"SELECT * FROM matches WHERE type = ? ORDER BY elimround desc, eliminstance, elimgroup, id", matchType)
|
2014-05-26 16:39:20 -07:00
|
|
|
return matches, err
|
|
|
|
|
}
|
2014-07-27 16:41:09 -07:00
|
|
|
|
|
|
|
|
func (match *Match) CapitalizedType() string {
|
|
|
|
|
if match.Type == "" {
|
|
|
|
|
return ""
|
2015-08-20 22:26:57 -07:00
|
|
|
} else if match.Type == "elimination" {
|
|
|
|
|
return "Playoff"
|
2014-07-27 16:41:09 -07:00
|
|
|
}
|
|
|
|
|
return strings.ToUpper(match.Type[0:1]) + match.Type[1:]
|
|
|
|
|
}
|
2016-08-28 00:49:52 -07:00
|
|
|
|
|
|
|
|
func (match *Match) TbaCode() string {
|
|
|
|
|
if match.Type == "qualification" {
|
|
|
|
|
return fmt.Sprintf("qm%s", match.DisplayName)
|
|
|
|
|
} else if match.Type == "elimination" {
|
|
|
|
|
return fmt.Sprintf("%s%dm%d", strings.ToLower(elimRoundNames[match.ElimRound]), match.ElimGroup,
|
|
|
|
|
match.ElimInstance)
|
|
|
|
|
}
|
|
|
|
|
return ""
|
|
|
|
|
}
|