phoenix/database/groups.go
Ivan R. 6396c160f2
feat: export and import
The list of links can now be exported to a json file,
and later imported back.
2024-04-01 23:35:46 +05:00

107 lines
1.7 KiB
Go

package database
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
}