03-05-Daniel-todogo/internal/db/group_queries.go

101 lines
2.0 KiB
Go

package db
import (
"database/sql"
"errors"
)
// GetAllGroups retrieves all groups from the database
func GetAllGroups() ([]Group, error) {
var groups []Group
query := `SELECT "GroupID", "GroupName" FROM "Groups" ORDER BY "GroupID"`
rows, err := DB.Query(query)
if err != nil {
return nil, err
}
defer rows.Close()
for rows.Next() {
var group Group
err := rows.Scan(&group.GroupID, &group.GroupName)
if err != nil {
return nil, err
}
groups = append(groups, group)
}
return groups, nil
}
// GetGroupByID retrieves a single group by ID
func GetGroupByID(groupID int) (*Group, error) {
var group Group
query := `SELECT "GroupID", "GroupName" FROM "Groups" WHERE "GroupID" = $1`
err := DB.QueryRow(query, groupID).Scan(&group.GroupID, &group.GroupName)
if err != nil {
if err == sql.ErrNoRows {
return nil, errors.New("group not found")
}
return nil, err
}
return &group, nil
}
// CreateGroup creates a new group in the database
func CreateGroup(groupName string) (*Group, error) {
var group Group
query := `INSERT INTO "Groups" ("GroupName") VALUES ($1) RETURNING "GroupID", "GroupName"`
err := DB.QueryRow(query, groupName).Scan(&group.GroupID, &group.GroupName)
if err != nil {
return nil, err
}
return &group, nil
}
// UpdateGroup updates an existing group
func UpdateGroup(groupID int, groupName string) error {
query := `UPDATE "Groups" SET "GroupName" = $1 WHERE "GroupID" = $2`
result, err := DB.Exec(query, groupName, groupID)
if err != nil {
return err
}
rowsAffected, err := result.RowsAffected()
if err != nil {
return err
}
if rowsAffected == 0 {
return errors.New("group not found")
}
return nil
}
// DeleteGroup deletes a group from the database
func DeleteGroup(groupID int) error {
query := `DELETE FROM "Groups" WHERE "GroupID" = $1`
result, err := DB.Exec(query, groupID)
if err != nil {
return err
}
rowsAffected, err := result.RowsAffected()
if err != nil {
return err
}
if rowsAffected == 0 {
return errors.New("group not found")
}
return nil
}