Implement boilerplate services
This commit is contained in:
56
guildService.go
Normal file
56
guildService.go
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
)
|
||||||
|
|
||||||
|
type GuildService struct {
|
||||||
|
db *DB
|
||||||
|
}
|
||||||
|
type GuildServiceQuery struct {
|
||||||
|
Name *string `db:"name"`
|
||||||
|
ID *int64 `db:"id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gs *GuildService) Query(query GuildServiceQuery) (Guild, error) {
|
||||||
|
guild := Guild{}
|
||||||
|
sqlQuery := "SELECT id, name FROM guild"
|
||||||
|
whereQuery := BuildWhereQuery(query)
|
||||||
|
if whereQuery != "" {
|
||||||
|
sqlQuery += " " + whereQuery
|
||||||
|
}
|
||||||
|
|
||||||
|
err := gs.db.readConn.QueryRow(sqlQuery).Scan(&guild.ID, &guild.Name)
|
||||||
|
if err != nil {
|
||||||
|
return guild, fmt.Errorf("failed getting guild for query %q: %v", sqlQuery, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return guild, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gs *GuildService) Create(name string) (Guild, error) {
|
||||||
|
guild := Guild{}
|
||||||
|
res, err := gs.db.writeConn.Exec("insert into guild (name) values (?)", name)
|
||||||
|
if err != nil {
|
||||||
|
return guild, fmt.Errorf("failed to insert guild: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
id, err := res.LastInsertId()
|
||||||
|
if err != nil {
|
||||||
|
return guild, fmt.Errorf("failed to get last insert id: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return gs.Query(GuildServiceQuery{ID: &id})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gs *GuildService) GetOrCreate(name string) (Guild, error) {
|
||||||
|
guild := Guild{}
|
||||||
|
guild, err := gs.Query(GuildServiceQuery{Name: &name})
|
||||||
|
if err != nil {
|
||||||
|
guild, err = gs.Create(name)
|
||||||
|
if err != nil {
|
||||||
|
return guild, fmt.Errorf("failed creating guild: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return guild, nil
|
||||||
|
}
|
46
noteService.go
Normal file
46
noteService.go
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type NoteService struct {
|
||||||
|
db *DB
|
||||||
|
}
|
||||||
|
type NoteServiceQuery struct {
|
||||||
|
Timestamp *string `db:"timestamp"`
|
||||||
|
PlayerID *int64 `db:"player"`
|
||||||
|
ID *int64 `db:"id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ns *NoteService) Query(query NoteServiceQuery) (Note, error) {
|
||||||
|
note := Note{}
|
||||||
|
sqlQuery := "SELECT id, content, timestamp, player FROM note"
|
||||||
|
whereQuery := BuildWhereQuery(query)
|
||||||
|
if whereQuery != "" {
|
||||||
|
sqlQuery += " " + whereQuery
|
||||||
|
}
|
||||||
|
|
||||||
|
err := ns.db.readConn.QueryRow(sqlQuery).Scan(¬e.ID, ¬e.Content, ¬e.Timestamp, ¬e.Player.ID)
|
||||||
|
if err != nil {
|
||||||
|
return note, fmt.Errorf("failed getting note for query %q: %v", sqlQuery, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return note, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ns *NoteService) Create(content string, timestamp time.Time, player Player) (Note, error) {
|
||||||
|
note := Note{}
|
||||||
|
res, err := ns.db.writeConn.Exec("insert into note (content, timestamp, player) values (?, ?, ?)", content, timestamp, player.ID)
|
||||||
|
if err != nil {
|
||||||
|
return note, fmt.Errorf("failed to insert note: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
id, err := res.LastInsertId()
|
||||||
|
if err != nil {
|
||||||
|
return note, fmt.Errorf("failed to get last insert id: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ns.Query(NoteServiceQuery{ID: &id})
|
||||||
|
}
|
54
playerService.go
Normal file
54
playerService.go
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
type PlayerService struct {
|
||||||
|
db *DB
|
||||||
|
}
|
||||||
|
type PlayerServiceQuery struct {
|
||||||
|
Name *string `db:"name"`
|
||||||
|
ID *int64 `db:"id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ps *PlayerService) Query(query PlayerServiceQuery) (Player, error) {
|
||||||
|
player := Player{}
|
||||||
|
sqlQuery := "SELECT id, name, guild FROM player"
|
||||||
|
whereQuery := BuildWhereQuery(query)
|
||||||
|
if whereQuery != "" {
|
||||||
|
sqlQuery += " " + whereQuery
|
||||||
|
}
|
||||||
|
|
||||||
|
err := ps.db.readConn.QueryRow(sqlQuery).Scan(&player.ID, &player.Name, &player.Guild.ID)
|
||||||
|
if err != nil {
|
||||||
|
return player, fmt.Errorf("failed getting player for query %q: %v", sqlQuery, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return player, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ps *PlayerService) Create(name string, guild Guild) (Player, error) {
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
|
return ps.Query(PlayerServiceQuery{ID: &id})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ps *PlayerService) GetOrCreate(name string, guild Guild) (Player, error) {
|
||||||
|
player := Player{}
|
||||||
|
player, err := ps.Query(PlayerServiceQuery{Name: &name})
|
||||||
|
if err != nil {
|
||||||
|
player, err = ps.Create(name, guild)
|
||||||
|
if err != nil {
|
||||||
|
return player, fmt.Errorf("failed creating player: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return player, nil
|
||||||
|
}
|
Reference in New Issue
Block a user