Rework query to return lists

This commit is contained in:
2024-10-27 19:07:47 +01:00
parent 91a3a0f4f7
commit b86d586c42
4 changed files with 222 additions and 148 deletions

View File

@@ -12,20 +12,30 @@ type GuildServiceQuery struct {
ID *int64 `db:"id"`
}
func (gs *GuildService) Query(query GuildServiceQuery) (Guild, error) {
guild := Guild{}
func (gs *GuildService) Query(query GuildServiceQuery) ([]Guild, error) {
res := []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)
rows, err := gs.db.readConn.Query(sqlQuery)
if err != nil {
return guild, fmt.Errorf("failed getting guild for query %q: %v", sqlQuery, err)
return res, fmt.Errorf("failed getting guilds for query %q: %v", sqlQuery, err)
}
defer rows.Close()
for rows.Next() {
guild := Guild{}
err := rows.Scan(&guild.ID, &guild.Name)
if err != nil {
return res, fmt.Errorf("failed scanning guild: %v", err)
}
res = append(res, guild)
}
return guild, nil
return res, nil
}
func (gs *GuildService) Create(name string) (Guild, error) {
@@ -40,13 +50,24 @@ func (gs *GuildService) Create(name string) (Guild, error) {
return guild, fmt.Errorf("failed to get last insert id: %v", err)
}
return gs.Query(GuildServiceQuery{ID: &id})
qres, err := gs.Query(GuildServiceQuery{ID: &id})
if err != nil {
return guild, fmt.Errorf("failed getting guild for id %d: %v", id, err)
}
if len(qres) > 1 {
return guild, fmt.Errorf("more than one guild found for id %d", id)
}
return qres[0], nil
}
func (gs *GuildService) GetOrCreate(name string) (Guild, error) {
guild := Guild{}
guild, err := gs.Query(GuildServiceQuery{Name: &name})
guilds, err := gs.Query(GuildServiceQuery{Name: &name})
if err != nil {
if len(guilds) > 1 {
return guild, fmt.Errorf("more than one guild found for name %s", name)
}
guild, err = gs.Create(name)
if err != nil {
return guild, fmt.Errorf("failed creating guild: %v", err)