57 lines
1.3 KiB
Go
57 lines
1.3 KiB
Go
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
|
|
}
|