423 lines
7.2 KiB
Go
423 lines
7.2 KiB
Go
|
|
package model
|
||
|
|
|
||
|
|
import (
|
||
|
|
"fmt"
|
||
|
|
"strings"
|
||
|
|
)
|
||
|
|
|
||
|
|
func (s *Model) GetTeamZone(zoneID string) (_ *TeamZone, err error) {
|
||
|
|
zone := TeamZone{
|
||
|
|
ZoneID: zoneID,
|
||
|
|
}
|
||
|
|
|
||
|
|
found, err := s.qx.One(&zone)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if !found {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
return &zone, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Model) GetTeamChamp(champID string) (_ *TeamChamp, err error) {
|
||
|
|
champ := TeamChamp{
|
||
|
|
ChampID: champID,
|
||
|
|
}
|
||
|
|
|
||
|
|
found, err := s.qx.One(&champ)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if !found {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
return &champ, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Model) GetTeam(teamID string) (_ *Team, err error) {
|
||
|
|
team := Team{
|
||
|
|
TeamID: teamID,
|
||
|
|
}
|
||
|
|
|
||
|
|
found, err := s.qx.One(&team)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if !found {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
return &team, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Model) GetTeamMatch(matchID string) (_ *TeamMatch, err error) {
|
||
|
|
m := TeamMatch{
|
||
|
|
MatchID: matchID,
|
||
|
|
}
|
||
|
|
|
||
|
|
found, err := s.qx.One(&m)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if !found {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
return &m, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Model) AddTeamZone(req TeamZone) (err error) {
|
||
|
|
if req.Name == "" {
|
||
|
|
err = fix.Field(EmptyValue, "name")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
req.Name = strings.Title(strings.ToLower(req.Name))
|
||
|
|
|
||
|
|
tx, err := s.qx.Tx()
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
defer tx.Close(&err)
|
||
|
|
|
||
|
|
_, err = tx.Insert(req)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
err = tx.Commit()
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Model) AddTeamChamp(req TeamChamp) (err error) {
|
||
|
|
if req.Name == "" {
|
||
|
|
err = fix.Field(EmptyValue, "name")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
tx, err := s.qx.Tx()
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
defer tx.Close(&err)
|
||
|
|
|
||
|
|
has, err := tx.Has("teamZones", "WHERE zoneID=?", req.ZoneID)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if !has {
|
||
|
|
err = fix.Field(UnknownZone, "zoneID")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
_, err = tx.Insert(req)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
err = tx.Commit()
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
func (s *Model) UpdateTeamChampName(req TeamChamp) (err error) {
|
||
|
|
if req.Name == "" {
|
||
|
|
err = fix.Field(EmptyValue, "name")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
err = s.qx.Exec("UPDATE teamChamps SET name=? WHERE champID=?", req.Name, req.ChampID)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
return
|
||
|
|
}
|
||
|
|
*/
|
||
|
|
|
||
|
|
func (s *Model) AddTeam(req Team) (err error) {
|
||
|
|
aliasName := NormalizeNameToAlias(req.CanonicalName)
|
||
|
|
|
||
|
|
req.CanonicalName = strings.Title(strings.ToLower(aliasName))
|
||
|
|
|
||
|
|
if req.CanonicalName == "" {
|
||
|
|
err = fix.Field(EmptyValue, "canonicalName")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
tx, err := s.qx.Tx()
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
defer tx.Close(&err)
|
||
|
|
|
||
|
|
_, err = tx.Insert(req)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
zone := TeamZone{
|
||
|
|
ZoneID: req.ZoneID,
|
||
|
|
}
|
||
|
|
|
||
|
|
_, err = tx.One(&zone)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// Добавляем alias
|
||
|
|
_, err = tx.Insert(TeamAlias{
|
||
|
|
Name: aliasName,
|
||
|
|
TeamID: req.TeamID,
|
||
|
|
SportID: zone.SportID,
|
||
|
|
})
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
err = tx.Commit()
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Model) AddTeamAlias(req TeamAlias) (err error) {
|
||
|
|
req.AliasID = 0
|
||
|
|
req.Name = NormalizeNameToAlias(req.Name)
|
||
|
|
|
||
|
|
if req.Name == "" {
|
||
|
|
err = fix.Field(EmptyValue, "name")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
tx, err := s.qx.Tx()
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
defer tx.Close(&err)
|
||
|
|
|
||
|
|
// Чтобы узнать sportID сперва достаем Team
|
||
|
|
team := Team{
|
||
|
|
TeamID: req.TeamID,
|
||
|
|
}
|
||
|
|
|
||
|
|
found, err := tx.One(&team)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if !found {
|
||
|
|
err = fix.Field(UnknownTeam, "teamID")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// Чтобы узнать sportID затем достаем teamZone
|
||
|
|
zone := TeamZone{
|
||
|
|
ZoneID: team.ZoneID,
|
||
|
|
}
|
||
|
|
|
||
|
|
_, err = tx.One(&zone)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
req.SportID = zone.SportID
|
||
|
|
|
||
|
|
/*
|
||
|
|
hasTeam, err := tx.Has("teams", "WHERE teamID=?", req.TeamID)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if !hasTeam {
|
||
|
|
err = fix.Field(UnknownTeam, "teamID")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
*/
|
||
|
|
|
||
|
|
hasAlias, err := tx.Has("teamAliases", "WHERE teamID=? AND name=?",
|
||
|
|
req.TeamID, req.Name)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if hasAlias {
|
||
|
|
err = fix.Field(Duplicate, "name")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// Добавляем alias
|
||
|
|
_, err = tx.Insert(req)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
err = tx.Commit()
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Model) SetTeamWasLinked(teamID string) (err error) {
|
||
|
|
err = s.qx.Exec(`UPDATE teams SET wasLinked=true WHERE teamID=?`, teamID)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Model) RemoveTeamAlias(aliasID int64) (err error) {
|
||
|
|
return s.qx.Exec(`DELETE FROM teamAliases WHERE aliasID=?`, aliasID)
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Model) AddTeamMatch(req TeamMatch) (err error) {
|
||
|
|
tx, err := s.qx.Tx()
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
defer tx.Close(&err)
|
||
|
|
|
||
|
|
req.MatchID = strings.TrimSpace(req.MatchID)
|
||
|
|
|
||
|
|
if req.MatchID == "" {
|
||
|
|
err = fix.Field(EmptyValue, "matchID")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
hasChamp, err := tx.Has("teamChamps", "WHERE champID=?", req.ChampID)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if !hasChamp {
|
||
|
|
err = fix.Field(UnknownChamp, "champID")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
hasHomeTeam, err := tx.Has("teams", "WHERE teamID=?", req.HomeTeamID)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if !hasHomeTeam {
|
||
|
|
err = fix.Field(UnknownTeam, "teamID")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
hasAwayTeam, err := tx.Has("teams", "WHERE teamID=?", req.AwayTeamID)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if !hasAwayTeam {
|
||
|
|
err = fix.Field(UnknownTeam, "teamID")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
*/
|
||
|
|
_, err = tx.Insert(req)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
err = tx.Commit()
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
type UpdateTeamCanonicalNameIn struct {
|
||
|
|
TeamID string
|
||
|
|
CanonicalName string
|
||
|
|
NewCanonicalName string
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Model) UpdateTeamCanonicalName(in UpdateTeamCanonicalNameIn) (err error) {
|
||
|
|
tx, err := s.qx.Tx()
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
defer tx.Close(&err)
|
||
|
|
|
||
|
|
// Старый canonicalName не нормализуем, ибо предполагается что имя мы получили из БД
|
||
|
|
in.NewCanonicalName = strings.Title(strings.ToLower(NormalizeNameToAlias(in.NewCanonicalName)))
|
||
|
|
|
||
|
|
if in.NewCanonicalName == "" {
|
||
|
|
err = fix.Field(EmptyValue, "newCanonicalName")
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// Удаляем старый alias
|
||
|
|
err = tx.Exec("DELETE FROM teamAliases WHERE teamID=? AND name=?",
|
||
|
|
in.TeamID, in.CanonicalName)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
// Обновляем canonicalName
|
||
|
|
err = tx.Exec("UPDATE teams SET canonicalName=? WHERE teamID=?",
|
||
|
|
in.NewCanonicalName, in.TeamID)
|
||
|
|
if err != nil {
|
||
|
|
fmt.Printf("old: %q, new: %q, teamID: %s\n", in.CanonicalName,
|
||
|
|
in.NewCanonicalName, in.TeamID)
|
||
|
|
|
||
|
|
//return
|
||
|
|
err = nil
|
||
|
|
}
|
||
|
|
|
||
|
|
hasAlias, err := tx.Has("teamAliases", "WHERE teamID=? AND name=?",
|
||
|
|
in.TeamID, in.NewCanonicalName)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if !hasAlias {
|
||
|
|
// Добавляем новый alias
|
||
|
|
_, err = tx.Insert(TeamAlias{
|
||
|
|
Name: in.NewCanonicalName,
|
||
|
|
TeamID: in.TeamID,
|
||
|
|
})
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
err = tx.Commit()
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Model) ListTeamZones(sportID int) (list []TeamZone, err error) {
|
||
|
|
err = s.qx.ListBy(&list, `WHERE sportID=? ORDER BY name ASC`, sportID)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Model) ListTeamCandidates(sportID int, name string) (matchIDs []string, err error) {
|
||
|
|
name = NormalizeNameToAlias(name)
|
||
|
|
|
||
|
|
err = s.qx.ListQuery(&matchIDs,
|
||
|
|
`SELECT teamID FROM teamAliases WHERE sportID=? AND name=?`, sportID, name)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Model) ListTeamsByZone(zoneID string) (list []Team, err error) {
|
||
|
|
err = s.qx.ListBy(&list, `WHERE zoneID=? ORDER BY canonicalName ASC`, zoneID)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Model) ListTeamAliases(teamID string) (list []TeamAlias, err error) {
|
||
|
|
err = s.qx.ListBy(&list, `WHERE teamID=? ORDER BY name ASC`, teamID)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
func (s *Model) ListTeams() (list []Team, err error) {
|
||
|
|
err = s.qx.List(&list)
|
||
|
|
if err != nil {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
return
|
||
|
|
}
|