From 89ae933b45aab8e8b0f84dfd5ffe066b99bda82f Mon Sep 17 00:00:00 2001 From: Dan Whitacre Date: Thu, 23 May 2024 00:02:26 -0400 Subject: [PATCH] add published query param to leaderboard --- api/api/leaderboard.go | 3 ++- api/domain/leaderboard.go | 33 ++++++++++++++++++++++++++++++++- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/api/api/leaderboard.go b/api/api/leaderboard.go index 0d061cf..725ac99 100644 --- a/api/api/leaderboard.go +++ b/api/api/leaderboard.go @@ -8,10 +8,11 @@ import ( func LeaderboardHandler(w http.ResponseWriter, r *http.Request) { id := r.PathValue("id") + published := r.URL.Query().Get("published") var leaderboard domain.Leaderboard leaderboard.LeaderboardId = id - err := domain.LeaderboardGet(&leaderboard) + err := domain.LeaderboardGet(&leaderboard, published != "false") if err != nil { logger.Warn("No leaderboard found with id", "id", id, "err", err) w.WriteHeader(http.StatusNoContent) diff --git a/api/domain/leaderboard.go b/api/domain/leaderboard.go index b88fbff..5f52234 100644 --- a/api/domain/leaderboard.go +++ b/api/domain/leaderboard.go @@ -56,6 +56,28 @@ func getLeaderboardData(leaderboardId string) ([]LeaderboardData, error) { return leaderboardData, nil } +func getUnpublishedLeaderboardData() ([]LeaderboardData, error) { + leaderboardData := []LeaderboardData{} + + rows, err := db.Query( + context.Background(), + `select '' as LeaderboardId, '' as LastModified, w.WeeklyId + from Weekly w + left join LeaderboardWeekly lw on lw.weeklyid = w.weeklyid + where leaderboardweeklyid is null`, + ) + if err != nil { + return leaderboardData, err + } + + leaderboardData, err = pgx.CollectRows(rows, pgx.RowToStructByName[LeaderboardData]) + if err != nil { + return leaderboardData, err + } + + return leaderboardData, nil +} + func toLeaderboard(leaderboardData []LeaderboardData, leaderboard *Leaderboard) error { if len(leaderboardData) < 1 { return errors.New("LeaderboardGet: no leaderboardData to create leaderboard from") @@ -93,7 +115,7 @@ func toLeaderboard(leaderboardData []LeaderboardData, leaderboard *Leaderboard) return nil } -func LeaderboardGet(leaderboard *Leaderboard) error { +func LeaderboardGet(leaderboard *Leaderboard, published bool) error { if leaderboard.LeaderboardId == "" { return errors.New("LeaderboardGet: missing leaderboardId, nothing to gets") } @@ -103,6 +125,15 @@ func LeaderboardGet(leaderboard *Leaderboard) error { return err } + if !published { + unpublishedLeaderboardData, err := getUnpublishedLeaderboardData() + if err != nil { + return err + } + + leaderboardData = append(leaderboardData, unpublishedLeaderboardData...) + } + err = toLeaderboard(leaderboardData, leaderboard) if err != nil { return err