Skip to content

Commit

Permalink
add published query param to leaderboard
Browse files Browse the repository at this point in the history
  • Loading branch information
Dan Whitacre committed May 23, 2024
1 parent 1d98402 commit 89ae933
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 2 deletions.
3 changes: 2 additions & 1 deletion api/api/leaderboard.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
33 changes: 32 additions & 1 deletion api/domain/leaderboard.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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")
}
Expand All @@ -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
Expand Down

0 comments on commit 89ae933

Please sign in to comment.