Skip to content

Commit

Permalink
add weekly and weekly match to db
Browse files Browse the repository at this point in the history
  • Loading branch information
Dan Whitacre committed May 19, 2024
1 parent 48b422e commit 985cd22
Show file tree
Hide file tree
Showing 9 changed files with 129 additions and 150 deletions.
1 change: 0 additions & 1 deletion api/.dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

!leaderboard
!player
!weekly
!go.mod
!go.sum
!*.go
Expand Down
1 change: 0 additions & 1 deletion api/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ WORKDIR /
COPY --from=build /hdstmevents-api /hdstmevents-api
COPY ./leaderboard /leaderboard
COPY ./player /player
COPY ./weekly /weekly

EXPOSE 8080
USER nonroot:nonroot
Expand Down
75 changes: 59 additions & 16 deletions api/domain/weekly.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package domain

import (
"encoding/json"
"context"
"errors"
"os"
"slices"

"github.com/jackc/pgx/v5"
)

type Weekly struct {
Expand All @@ -22,43 +23,85 @@ type WeeklyResult struct {
Score int `json:"score"`
}

func WeeklyGet(weekly *Weekly) error {
if weekly.WeeklyId == "" {
return errors.New("WeeklyGet: missing weekly id, nothing to gets")
type WeeklyData struct {
WeeklyId string
MatchId string
}

func getWeeklyData(weeklyId string) ([]WeeklyData, error) {
var weeklyData []WeeklyData

rows, err := db.Query(
context.Background(),
`select w.WeeklyId, wm.MatchId
from Weekly w
join WeeklyMatch wm on w.WeeklyId = wm.WeeklyId
where w.WeeklyId=$1`,
weeklyId,
)
if err != nil {
return weeklyData, err
}

file, err := os.Open("weekly/" + weekly.WeeklyId)

weeklyData, err = pgx.CollectRows(rows, pgx.RowToStructByName[WeeklyData])
if err != nil {
return err
return weeklyData, err
}
defer file.Close()

jsonParser := json.NewDecoder(file)
if err = jsonParser.Decode(weekly); err != nil {
return err
return weeklyData, nil
}

func toWeekly(weeklyData []WeeklyData, weekly *Weekly) error {
if len(weeklyData) < 1 {
return errors.New("WeeklyGet: no weeklyData to create weekly from")
}

for i := 0; i < len(weekly.Matches); i++ {
err = MatchGet(weekly.Matches[i].Match)
weekly.WeeklyId = weeklyData[0].WeeklyId

for i := 0; i < len(weeklyData); i++ {
var match Match
match.MatchId = weeklyData[i].MatchId
err := MatchGet(&match)
if err != nil {
return err
}

var weeklyMatch WeeklyMatch
weeklyMatch.Match = &match
weekly.Matches = append(weekly.Matches, &weeklyMatch)

for j := 0; j < len(weekly.Matches[i].Match.PointsResults); j++ {
idx := slices.IndexFunc(weekly.Results, func (weeklyResult *WeeklyResult) bool {
return weeklyResult.Player.AccountId == weekly.Matches[i].Match.PointsResults[j].Player.AccountId
})
if idx == -1 {
weeklyResult := &WeeklyResult{}
var weeklyResult WeeklyResult
weeklyResult.Player = weekly.Matches[i].Match.PointsResults[j].Player
idx = len(weekly.Results)
weekly.Results = append(weekly.Results, weeklyResult)
weekly.Results = append(weekly.Results, &weeklyResult)
}
weekly.Results[idx].Score += weekly.Matches[i].Match.PointsResults[j].Score
}
}

return nil
}

func WeeklyGet(weekly *Weekly) error {
if weekly.WeeklyId == "" {
return errors.New("WeeklyGet: missing weekly id, nothing to gets")
}

weeklyData, err := getWeeklyData(weekly.WeeklyId)
if err != nil {
return err
}

err = toWeekly(weeklyData, weekly)
if err != nil {
return err
}

slices.SortFunc(weekly.Results, func (weeklyResultA *WeeklyResult, weeklyResultB *WeeklyResult) int {
return weeklyResultB.Score - weeklyResultA.Score
})
Expand Down
51 changes: 0 additions & 51 deletions api/weekly/2024-04-27

This file was deleted.

27 changes: 0 additions & 27 deletions api/weekly/2024-05-04

This file was deleted.

27 changes: 0 additions & 27 deletions api/weekly/2024-05-11

This file was deleted.

27 changes: 0 additions & 27 deletions api/weekly/2024-05-17

This file was deleted.

16 changes: 16 additions & 0 deletions db/005_create_weekly.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
create table Weekly(
WeeklyId varchar not null primary key
);

create table WeeklyMatch(
WeeklyMatchId serial primary key,
WeeklyId varchar not null,
MatchId varchar not null,
foreign key(WeeklyId) references Weekly(WeeklyId),
foreign key(MatchId) references Match(MatchId)
);

---- create above / drop below ----

drop table WeeklyMatch;
drop table Weekly;
54 changes: 54 additions & 0 deletions db/006_seed_weekly.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
insert into Weekly (WeeklyId)
values
('2024-04-27'),
('2024-05-04'),
('2024-05-11'),
('2024-05-17');

insert into WeeklyMatch (WeeklyId, MatchId)
values
('2024-04-27', '2024-04-27-finals'),
('2024-04-27', '2024-04-27-firstround-a'),
('2024-04-27', '2024-04-27-firstround-b'),
('2024-04-27', '2024-04-27-firstround-c'),
('2024-04-27', '2024-04-27-firstround-d'),
('2024-04-27', '2024-04-27-firstround-e'),
('2024-04-27', '2024-04-27-firstround-f'),
('2024-04-27', '2024-04-27-firstround-g'),
('2024-04-27', '2024-04-27-firstround-h'),
('2024-04-27', '2024-04-27-qualifying'),
('2024-04-27', '2024-04-27-quarterfinal-i'),
('2024-04-27', '2024-04-27-quarterfinal-j'),
('2024-04-27', '2024-04-27-quarterfinal-k'),
('2024-04-27', '2024-04-27-quarterfinal-l'),
('2024-04-27', '2024-04-27-semifinal-m'),
('2024-04-27', '2024-04-27-semifinal-n'),
('2024-05-04', '2024-05-04-finals'),
('2024-05-04', '2024-05-04-qualifying'),
('2024-05-04', '2024-05-04-quarterfinal-a'),
('2024-05-04', '2024-05-04-quarterfinal-b'),
('2024-05-04', '2024-05-04-quarterfinal-c'),
('2024-05-04', '2024-05-04-quarterfinal-d'),
('2024-05-04', '2024-05-04-semifinal-a'),
('2024-05-04', '2024-05-04-semifinal-b'),
('2024-05-11', '2024-05-11-finals'),
('2024-05-11', '2024-05-11-qualifying'),
('2024-05-11', '2024-05-11-quarterfinal-a'),
('2024-05-11', '2024-05-11-quarterfinal-b'),
('2024-05-11', '2024-05-11-quarterfinal-c'),
('2024-05-11', '2024-05-11-quarterfinal-d'),
('2024-05-11', '2024-05-11-semifinal-a'),
('2024-05-11', '2024-05-11-semifinal-b'),
('2024-05-17', '2024-05-17-qualifying'),
('2024-05-17', '2024-05-17-quarterfinal-a'),
('2024-05-17', '2024-05-17-quarterfinal-b'),
('2024-05-17', '2024-05-17-quarterfinal-c'),
('2024-05-17', '2024-05-17-quarterfinal-d'),
('2024-05-17', '2024-05-17-semifinal-a'),
('2024-05-17', '2024-05-17-semifinal-b'),
('2024-05-17', '2024-05-17-finals');

---- create above / drop below ----

delete from WeeklyMatch;
delete from Weekly;

0 comments on commit 985cd22

Please sign in to comment.