Implement save method in playerservice to update existing player entities

This commit is contained in:
2024-10-31 00:46:52 +01:00
parent b0767c8794
commit 46f91ea364
2 changed files with 34 additions and 0 deletions

View File

@@ -39,6 +39,36 @@ func (ps *PlayerService) Query(query PlayerServiceQuery) ([]Player, error) {
return res, nil return res, nil
} }
func (ps *PlayerService) Save(player Player) (Player, error) {
log.Printf("Saving player %s", player.Name)
res, err := ps.db.writeConn.Exec("insert into player (name, guild) values (?, ?) on conflict (name) do update set guild = ?", player.Name, player.Guild.ID, player.Guild.ID)
if err != nil {
return player, fmt.Errorf("failed to update player: %v", err)
}
id := player.ID
if id == 0 {
id, err = res.LastInsertId()
if err != nil {
return player, fmt.Errorf("failed to get last insert id: %v", err)
}
}
log.Printf("Updated player %s with id %d", player.Name, id)
qres, err := ps.Query(PlayerServiceQuery{ID: &id})
if err != nil {
return player, fmt.Errorf("failed getting player for id %d: %v", id, err)
}
if len(qres) > 1 {
return player, fmt.Errorf("more than one player found for id %d", id)
}
if len(qres) == 0 {
return player, fmt.Errorf("no player found for id %d", id)
}
return qres[0], nil
}
func (ps *PlayerService) Create(name string, guild Guild) (Player, error) { func (ps *PlayerService) Create(name string, guild Guild) (Player, error) {
log.Printf("Creating player %s in guild %s", name, guild.Name) log.Printf("Creating player %s in guild %s", name, guild.Name)
player := Player{} player := Player{}

View File

@@ -96,6 +96,10 @@ func PersistNoteData(note NoteData) (Note, []Association, error) {
} }
res.Player = player res.Player = player
player.Guild = guild player.Guild = guild
player, err = ps.Save(player)
if err != nil {
return res, ass, fmt.Errorf("failed saving player: %v", err)
}
for _, assoc := range note.Associations { for _, assoc := range note.Associations {
assocPlayer, err := ps.GetOrCreate(assoc.Player, Guild{}) assocPlayer, err := ps.GetOrCreate(assoc.Player, Guild{})