lishwist/server/db/group.go

62 lines
1.4 KiB
Go

package db
import "database/sql"
type Group struct {
Id string
Name string
Reference string
}
func queryForGroup(query string, args ...any) (*Group, error) {
var id string
var name string
var reference string
err := database.QueryRow(query, args...).Scan(&id, &name, &reference)
if err == sql.ErrNoRows {
return nil, nil
} else if err != nil {
return nil, err
}
group := Group{
Id: id,
Name: name,
Reference: reference,
}
return &group, nil
}
func GetGroupByReference(reference string) (*Group, error) {
stmt := "SELECT [group].id, [group].name, [group].reference FROM [group] WHERE [group].reference = ?"
return queryForGroup(stmt, reference)
}
func (g *Group) GetMembers() ([]User, error) {
stmt := "SELECT user.id, user.name, user.reference FROM user JOIN group_member ON group_member.user_id = user.id JOIN [group] ON [group].id = group_member.group_id WHERE [group].id = ?"
rows, err := database.Query(stmt, g.Id)
users := []User{}
if err != nil {
return users, err
}
defer rows.Close()
for rows.Next() {
var id string
var name string
var reference string
err := rows.Scan(&id, &name, &reference)
if err != nil {
return users, err
}
users = append(users, User{
Id: id,
Name: name,
Reference: reference,
})
}
err = rows.Err()
if err != nil {
return users, err
}
return users, nil
}