Skip to content

Commit 6c75a6e

Browse files
committed
refactor player seeding, remove existing seed players
1 parent 22207d3 commit 6c75a6e

File tree

5 files changed

+52
-15
lines changed

5 files changed

+52
-15
lines changed

api/pkg/db/init.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ func InitDB(dbConfig Config) *gorm.DB {
8585

8686
func initTables(db *gorm.DB) {
8787
initSportsTable(db)
88+
deleteAllSeedPlayers(db)
8889
initPlayersTable(db)
8990
}
9091

@@ -93,7 +94,7 @@ func initPlayersTable(db *gorm.DB) {
9394

9495
db.AutoMigrate(&models.Player{})
9596
for _, p := range models.GenerateSeedPlayers() {
96-
if err := InsertPlayer(db, &p); err != nil {
97+
if err := InsertPlayer(db, p); err != nil {
9798
log.Warn(err)
9899
}
99100
}

api/pkg/db/player.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55

66
"github.com/adamdevigili/skillbased/api/pkg/models"
77
"github.com/jinzhu/gorm"
8+
"github.com/labstack/gommon/log"
89
)
910

1011
func InsertPlayer(db *gorm.DB, player *models.Player) error {
@@ -47,3 +48,8 @@ func DeletePlayer(db *gorm.DB, id string) error {
4748
return nil
4849
}
4950
}
51+
52+
func deleteAllSeedPlayers(db *gorm.DB) {
53+
log.Info("deleteing all seed players from existing DB")
54+
db.Where("is_seed = ?", "t").Delete(&models.Player{})
55+
}

api/pkg/models/player.go

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,36 @@
11
package models
22

3+
import (
4+
"encoding/json"
5+
6+
"github.com/jinzhu/gorm"
7+
"github.com/jinzhu/gorm/dialects/postgres"
8+
)
9+
310
type Player struct {
4-
ID string `json:"id"`
11+
Base
512
FirstName string `json:"first_name"`
613
LastName string `json:"last_name"`
714

815
// Skills is a map relating an existing Sport's ID to a SkillMap (map of skill name to rating out of 10)
9-
Skills map[string]SkillMap `json:"skills"`
10-
PowerScores map[string]int `json:"power_scores"`
11-
IsSeed bool `json:"-"`
16+
Skills map[string]SkillMap `gorm:"-" json:"skills"`
17+
SkillsDB postgres.Jsonb `json:"-"`
18+
19+
PowerScores map[string]int `gorm:"-" json:"power_scores"`
20+
PowerScoresDB postgres.Jsonb `json:"-"`
21+
22+
IsSeed bool `json:"-"`
23+
}
24+
25+
// BeforeCreate is a GORM hook that is used to convert the Go map to a JSON struct to be stored in postgres
26+
func (p *Player) BeforeCreate(scope *gorm.Scope) (err error) {
27+
if x, err := json.Marshal(p.PowerScores); err != nil {
28+
return err
29+
} else {
30+
p.PowerScoresDB = postgres.Jsonb{RawMessage: x}
31+
}
32+
33+
return
1234
}
1335

1436
type PlayerList struct {

api/pkg/models/seed.go

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package models
22

33
import (
4+
"fmt"
5+
46
"github.com/pioz/faker"
57
"github.com/rs/xid"
68
)
@@ -55,19 +57,28 @@ var (
5557

5658
var playersToGenerate = 30
5759

58-
func GenerateSeedPlayers() []Player {
60+
func GenerateSeedPlayers() []*Player {
5961
faker.SetSeed(623)
60-
players := make([]Player, playersToGenerate)
62+
players := make([]*Player, playersToGenerate)
63+
64+
for i := range players {
65+
fn, ln := faker.FirstName(), faker.LastName()
66+
p := &Player{
67+
FirstName: fn,
68+
LastName: ln,
69+
Base: Base{
70+
Name: fmt.Sprintf("%s %s", fn, ln),
71+
ID: xid.New(),
72+
},
73+
PowerScores: make(map[string]int),
74+
IsSeed: true,
75+
}
6176

62-
for _, p := range players {
63-
p.ID = xid.New().String()
64-
p.FirstName = faker.FirstName()
65-
p.LastName = faker.LastName()
6677
for _, s := range skillsList {
6778
p.PowerScores[s] = faker.IntInRange(1, 10)
6879
}
6980

70-
p.IsSeed = true
81+
players[i] = p
7182
}
7283

7384
return players

frontend/exec.sh

Lines changed: 0 additions & 3 deletions
This file was deleted.

0 commit comments

Comments
 (0)