Implement boilerplate services

This commit is contained in:
2024-10-27 18:00:21 +01:00
parent 251e372f72
commit 91a3a0f4f7
3 changed files with 156 additions and 0 deletions

56
guildService.go Normal file
View 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
}