Move everything to backend
This commit is contained in:
83
backend/playerService.go
Normal file
83
backend/playerService.go
Normal file
@@ -0,0 +1,83 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
)
|
||||
|
||||
type PlayerService struct {
|
||||
db *DB
|
||||
}
|
||||
type PlayerServiceQuery struct {
|
||||
Name *string `db:"name"`
|
||||
ID *int64 `db:"id"`
|
||||
}
|
||||
|
||||
func (ps *PlayerService) Query(query PlayerServiceQuery) ([]Player, error) {
|
||||
res := []Player{}
|
||||
sqlQuery := "SELECT id, name, guild FROM player"
|
||||
whereQuery := BuildWhereQuery(query)
|
||||
if whereQuery != "" {
|
||||
sqlQuery += " " + whereQuery
|
||||
}
|
||||
|
||||
rows, err := ps.db.readConn.Query(sqlQuery)
|
||||
if err != nil {
|
||||
return res, fmt.Errorf("failed getting players for query %q: %v", sqlQuery, err)
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
player := Player{}
|
||||
err := rows.Scan(&player.ID, &player.Name, &player.Guild.ID)
|
||||
if err != nil {
|
||||
return res, fmt.Errorf("failed scanning player: %v", err)
|
||||
}
|
||||
res = append(res, player)
|
||||
}
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
func (ps *PlayerService) Create(name string, guild Guild) (Player, error) {
|
||||
log.Printf("Creating player %s in guild %s", name, guild.Name)
|
||||
player := Player{}
|
||||
res, err := ps.db.writeConn.Exec("insert into player (name, guild) values (?, ?)", name, guild.ID)
|
||||
if err != nil {
|
||||
return player, fmt.Errorf("failed to insert player: %v", err)
|
||||
}
|
||||
|
||||
id, err := res.LastInsertId()
|
||||
if err != nil {
|
||||
return player, fmt.Errorf("failed to get last insert id: %v", err)
|
||||
}
|
||||
log.Printf("Created player %s in guild %s with id %d", name, guild.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)
|
||||
}
|
||||
|
||||
return qres[0], nil
|
||||
}
|
||||
|
||||
func (ps *PlayerService) GetOrCreate(name string, guild Guild) (Player, error) {
|
||||
player := Player{}
|
||||
players, err := ps.Query(PlayerServiceQuery{Name: &name})
|
||||
if len(players) > 1 {
|
||||
return player, fmt.Errorf("more than one player found for name %s", name)
|
||||
}
|
||||
if err != nil || len(players) == 0 {
|
||||
player, err = ps.Create(name, guild)
|
||||
if err != nil {
|
||||
return player, fmt.Errorf("failed creating player: %v", err)
|
||||
}
|
||||
}
|
||||
if len(players) == 1 {
|
||||
player = players[0]
|
||||
}
|
||||
return player, nil
|
||||
}
|
Reference in New Issue
Block a user