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 }