Skip to content

Commit

Permalink
Fixed getting X01 History
Browse files Browse the repository at this point in the history
  • Loading branch information
thordy committed Feb 14, 2024
1 parent 77b35b8 commit db3bc8d
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 13 deletions.
61 changes: 61 additions & 0 deletions data/leg.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"sort"

"github.com/guregu/null"
"github.com/jmoiron/sqlx"
"github.com/kcapp/api/models"
"github.com/kcapp/api/util"
)
Expand Down Expand Up @@ -750,6 +751,65 @@ func GetLegsForMatch(matchID int) ([]*models.Leg, error) {
return legs, nil
}

// GetLegs returns all legs with the given IDs
func GetLegs(ids []int) ([]*models.Leg, error) {
q, args, err := sqlx.In(`
SELECT
l.id, l.end_time, l.starting_score, l.is_finished,
l.current_player_id, l.winner_id, l.created_at, l.updated_at,
l.match_id, l.has_scores, GROUP_CONCAT(p2l.player_id ORDER BY p2l.order ASC) as "players",
mt.id as 'match_type_id', mt.name, mt.description
FROM leg l
LEFT JOIN player2leg p2l ON p2l.leg_id = l.id
LEFT JOIN matches m ON m.id = l.match_id
LEFT JOIN match_type mt on mt.id = IFNULL(l.leg_type_id, m.match_type_id)
WHERE l.id IN(?)
GROUP BY l.id
ORDER BY l.id ASC`, ids)
if err != nil {
return nil, err
}
rows, err := models.DB.Query(q, args...)
if err != nil {
return nil, err
}
defer rows.Close()

legs := make([]*models.Leg, 0)
for rows.Next() {
leg := new(models.Leg)
leg.LegType = new(models.MatchType)
var players string
err := rows.Scan(&leg.ID, &leg.Endtime, &leg.StartingScore, &leg.IsFinished, &leg.CurrentPlayerID,
&leg.WinnerPlayerID, &leg.CreatedAt, &leg.UpdatedAt, &leg.MatchID, &leg.HasScores, &players, &leg.LegType.ID,
&leg.LegType.Name, &leg.LegType.Description)
if err != nil {
return nil, err
}
leg.Players = util.StringToIntArray(players)
visits, err := GetLegVisits(leg.ID)
if err != nil {
return nil, err
}
leg.Visits = visits

matchType := leg.LegType.ID
if matchType == models.X01 || matchType == models.X01HANDICAP || matchType == models.TICTACTOE || matchType == models.KNOCKOUT ||
matchType == models.ONESEVENTY {

Check failure on line 798 in data/leg.go

View workflow job for this annotation

GitHub Actions / build

undefined: models.ONESEVENTY
leg.Parameters, err = GetLegParameters(leg.ID)
if err != nil {
return nil, err
}
}
legs = append(legs, leg)
}
if err = rows.Err(); err != nil {
return nil, err
}

return legs, nil
}

// GetLegsOfType returns all legs with scores for the given match type
func GetLegsOfType(matchType int, loadVisits bool) ([]*models.Leg, error) {
rows, err := models.DB.Query(`
Expand Down Expand Up @@ -791,6 +851,7 @@ func GetLegsOfType(matchType int, loadVisits bool) ([]*models.Leg, error) {
return nil, err
}
}
leg.LegType = &models.MatchType{ID: matchType}
legs = append(legs, leg)
}
if err = rows.Err(); err != nil {
Expand Down
25 changes: 12 additions & 13 deletions data/statistics_x01.go
Original file line number Diff line number Diff line change
Expand Up @@ -464,15 +464,6 @@ func GetX01StatisticsForPlayer(id int, matchType int) (*models.StatisticsX01, er

// GetX01HistoryForPlayer will return history of X01 statistics for the given player
func GetX01HistoryForPlayer(id int, limit int, matchType int) ([]*models.Leg, error) {
legs, err := GetLegsOfType(matchType, false)
if err != nil {
return nil, err
}
m := make(map[int]*models.Leg)
for _, leg := range legs {
m[leg.ID] = leg
}

rows, err := models.DB.Query(`
SELECT
l.id AS 'leg_id',
Expand Down Expand Up @@ -506,7 +497,8 @@ func GetX01HistoryForPlayer(id int, limit int, matchType int) ([]*models.Leg, er
}
defer rows.Close()

legs = make([]*models.Leg, 0)
statistics := make(map[int]*models.StatisticsX01, 0)
legIDs := make([]int, 0)
for rows.Next() {
s := new(models.StatisticsX01)
err := rows.Scan(&s.LegID, &s.PlayerID, &s.PPD, &s.FirstNinePPD, &s.ThreeDartAvg, &s.FirstNineThreeDartAvg, &s.Score60sPlus, &s.Score100sPlus,
Expand All @@ -515,9 +507,16 @@ func GetX01HistoryForPlayer(id int, limit int, matchType int) ([]*models.Leg, er
if err != nil {
return nil, err
}
leg := m[s.LegID]
leg.Statistics = s
legs = append(legs, leg)
statistics[s.LegID] = s
legIDs = append(legIDs, s.LegID)
}

legs, err := GetLegs(legIDs)
if err != nil {
return nil, err
}
for _, leg := range legs {
leg.Statistics = statistics[leg.ID]
}
return legs, nil
}
Expand Down

0 comments on commit db3bc8d

Please sign in to comment.