62 lines
1.4 KiB
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
|
|
}
|