mirror of
https://github.com/ordinary-dev/phoenix
synced 2024-09-20 03:40:29 +05:00
107 lines
1.7 KiB
Go
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
|
|
}
|