Skip to content

Commit

Permalink
Added players to match presets
Browse files Browse the repository at this point in the history
  • Loading branch information
thordy committed Dec 1, 2024
1 parent 25748c9 commit 7b6283e
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 8 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
- TTS voice selection per venue
- Improved Tournament Generation
- Support for `Max Rounds` in `X01`
- Added `players` to match presets
- Lots of new badges

#### Changed
Expand Down
56 changes: 48 additions & 8 deletions data/match_preset.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package data

import (
"encoding/json"
"log"

"github.com/guregu/null"
"github.com/kcapp/api/models"
)

Expand All @@ -11,7 +13,7 @@ func GetPresets() ([]*models.MatchPreset, error) {
rows, err := models.DB.Query(`
SELECT
mp.id, mp.name, match_type_id, mt.name, match_mode_id, mm.name, mm.short_name,
starting_score, smartcard_uid, mp.description
starting_score, players, smartcard_uid, mp.description
FROM match_preset mp
JOIN match_type mt ON mt.id = mp.match_type_id
JOIN match_mode mm ON mm.id = mp.match_mode_id`)
Expand All @@ -25,10 +27,20 @@ func GetPresets() ([]*models.MatchPreset, error) {
p := new(models.MatchPreset)
mt := new(models.MatchType)
mm := new(models.MatchMode)
err := rows.Scan(&p.ID, &p.Name, &mt.ID, &mt.Name, &mm.ID, &mm.Name, &mm.ShortName, &p.StartingScore, &p.SmartcardUID, &p.Description)
var pStr null.String
err := rows.Scan(&p.ID, &p.Name, &mt.ID, &mt.Name, &mm.ID, &mm.Name, &mm.ShortName, &p.StartingScore, &pStr, &p.SmartcardUID, &p.Description)
if err != nil {
return nil, err
}
if pStr.Valid {
var players []int
err = json.Unmarshal([]byte(pStr.String), &players)
if err != nil {
return nil, err
}
p.Players = players
}

p.MatchMode = mm
p.MatchType = mt
presets = append(presets, p)
Expand All @@ -45,18 +57,28 @@ func GetPreset(id int) (*models.MatchPreset, error) {
p := new(models.MatchPreset)
mt := new(models.MatchType)
mm := new(models.MatchMode)
var pStr null.String
err := models.DB.QueryRow(`
SELECT
mp.id, mp.name, match_type_id, mt.name, match_mode_id, mm.name, mm.short_name,
starting_score, smartcard_uid, mp.description
starting_score, players, smartcard_uid, mp.description
FROM match_preset mp
JOIN match_type mt ON mt.id = mp.match_type_id
JOIN match_mode mm ON mm.id = mp.match_mode_id
WHERE mp.id = ?`, id).
Scan(&p.ID, &p.Name, &mt.ID, &mt.Name, &mm.ID, &mm.Name, &mm.ShortName, &p.StartingScore, &p.SmartcardUID, &p.Description)
Scan(&p.ID, &p.Name, &mt.ID, &mt.Name, &mm.ID, &mm.Name, &mm.ShortName, &p.StartingScore, &pStr, &p.SmartcardUID, &p.Description)
if err != nil {
return nil, err
}
if pStr.Valid {
var players []int
err = json.Unmarshal([]byte(pStr.String), &players)
if err != nil {
return nil, err
}
p.Players = players
}

p.MatchMode = mm
p.MatchType = mt

Expand All @@ -66,13 +88,22 @@ func GetPreset(id int) (*models.MatchPreset, error) {
// AddPreset will add a new preset to the database
func AddPreset(preset models.MatchPreset) error {
stmt, err := models.DB.Prepare(`
INSERT INTO match_preset(name, match_type_id, match_mode_id, starting_score, smartcard_uid, description) VALUES(?, ?, ?, ?, ?, ?)`)
INSERT INTO match_preset(name, match_type_id, match_mode_id, starting_score, players, smartcard_uid, description) VALUES(?, ?, ?, ?, ?, ?, ?)`)
if err != nil {
return err
}
defer stmt.Close()

_, err = stmt.Exec(preset.Name, preset.MatchType.ID, preset.MatchMode.ID, preset.StartingScore, preset.SmartcardUID, preset.Description)
var pStr null.String
if len(preset.Players) > 0 {
players, err := json.Marshal(preset.Players)
if err != nil {
return err
}
pStr = null.StringFrom(string(players))
}

_, err = stmt.Exec(preset.Name, preset.MatchType.ID, preset.MatchMode.ID, preset.StartingScore, pStr, preset.SmartcardUID, preset.Description)
if err != nil {
return err
}
Expand All @@ -84,14 +115,23 @@ func AddPreset(preset models.MatchPreset) error {
func UpdatePreset(id int, preset models.MatchPreset) error {
stmt, err := models.DB.Prepare(`
UPDATE match_preset SET
name = ?, match_type_id = ?, match_mode_id = ?, starting_score = ?, smartcard_uid = ?, description = ?
name = ?, match_type_id = ?, match_mode_id = ?, starting_score = ?, players = ?, smartcard_uid = ?, description = ?
WHERE id = ?`)
if err != nil {
return err
}
defer stmt.Close()

_, err = stmt.Exec(preset.Name, preset.MatchType.ID, preset.MatchMode.ID, preset.StartingScore, preset.SmartcardUID, preset.Description, id)
var pStr null.String
if len(preset.Players) > 0 {
players, err := json.Marshal(preset.Players)
if err != nil {
return err
}
pStr = null.StringFrom(string(players))
}

_, err = stmt.Exec(preset.Name, preset.MatchType.ID, preset.MatchMode.ID, preset.StartingScore, pStr, preset.SmartcardUID, preset.Description, id)
if err != nil {
return err
}
Expand Down
1 change: 1 addition & 0 deletions models/match_preset.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ type MatchPreset struct {
MatchType *MatchType `json:"match_type"`
MatchMode *MatchMode `json:"match_mode"`
StartingScore null.Int `json:"starting_score"`
Players []int `json:"players,omitempty"`
SmartcardUID null.String `json:"smartcard_uid,omitempty"`
Description null.String `json:"description,omitempty"`
}

0 comments on commit 7b6283e

Please sign in to comment.