Implement save method in playerservice to update existing player entities
This commit is contained in:
@@ -39,6 +39,36 @@ func (ps *PlayerService) Query(query PlayerServiceQuery) ([]Player, error) {
|
||||
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) {
|
||||
log.Printf("Creating player %s in guild %s", name, guild.Name)
|
||||
player := Player{}
|
||||
|
Reference in New Issue
Block a user