phoenix/database/groups.go

107 lines
1.7 KiB
Go
Raw Normal View History

2023-07-22 15:24:01 +05:00
package database
2023-04-06 10:36:11 +05:00
type Group struct {
ID int `json:"id"`
Name string `json:"name"`
Links []Link `json:"links"`
}
func GetGroupsWithLinks() ([]Group, error) {
query := `
SELECT id, name
FROM groups
ORDER BY groups.id
`
rows, err := DB.Query(query)
if err != nil {
return nil, err
}
defer rows.Close()
var groups []Group
for rows.Next() {
var group Group
if err := rows.Scan(&group.ID, &group.Name); err != nil {
return nil, err
}
groups = append(groups, group)
}
if err := rows.Err(); err != nil {
return nil, err
}
for i := range groups {
groups[i].Links, err = GetLinksFromGroup(groups[i].ID)
if err != nil {
return nil, err
}
}
return groups, nil
}
// Create a new group in the database.
// The function fills in the ID.
func CreateGroup(group *Group) error {
query := `
INSERT INTO groups (name)
VALUES (?)
RETURNING id
`
if err := DB.QueryRow(query, group.Name).Scan(&group.ID); err != nil {
return err
}
return nil
}
func UpdateGroup(id int, name string) error {
query := `
UPDATE groups
SET name = ?
WHERE id = ?
`
res, err := DB.Exec(query, name, id)
if err != nil {
return err
}
rowsAffected, err := res.RowsAffected()
if err != nil {
return err
}
if rowsAffected != 1 {
return ErrWrongNumberOfAffectedRows
}
return nil
}
func DeleteGroup(groupID int) error {
query := `
DELETE FROM groups
WHERE id = ?
`
res, err := DB.Exec(query, groupID)
if err != nil {
return err
}
rowsAffected, err := res.RowsAffected()
if err != nil {
return err
}
if rowsAffected != 1 {
return ErrWrongNumberOfAffectedRows
}
return nil
2023-04-06 10:36:11 +05:00
}