You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
quartermaster/internal/postgres/groups.go

90 lines
2.4 KiB

package postgres
import (
"database/sql"
"log"
"github.com/dustinpianalto/quartermaster"
)
type groupService struct {
db *sql.DB
}
func (s groupService) Group(id int, user *quartermaster.User) (*quartermaster.Group, error) {
var g quartermaster.Group
queryString := "SELECT id, name, description FROM groups WHERE id = $1 AND owner_id = $2"
row := s.db.QueryRow(queryString, id, user.ID)
err := row.Scan(&g.ID, &g.Name, &g.Description)
if err != nil {
return nil, err
}
return &g, nil
}
func (s groupService) AddGroup(g *quartermaster.Group, user *quartermaster.User) (*quartermaster.Group, error) {
queryString := "INSERT INTO groups (name, description, owner_id) VALUES ($1, $2, $3) RETURNING id"
err := s.db.QueryRow(queryString, g.Name, g.Description, user.ID).Scan(&g.ID)
return g, err
}
func (s groupService) UpdateGroup(g *quartermaster.Group, user *quartermaster.User) error {
queryString := "UPDATE groups SET name = $2, description = $3 WHERE id = $1 AND owner_id = $4"
_, err := s.db.Exec(queryString, g.ID, g.Name, g.Description, user.ID)
return err
}
func (s groupService) DeleteGroup(g *quartermaster.Group, user *quartermaster.User) error {
queryString := "DELETE FROM groups WHERE id = $1 AND owner_id = $2"
_, err := s.db.Exec(queryString, g.ID, user.ID)
return err
}
func (s groupService) GetItems(g *quartermaster.Group, user *quartermaster.User) ([]*quartermaster.Item, error) {
var items []*quartermaster.Item
queryString := "SELECT item_id FROM x_items_groups WHERE group_id = $1"
rows, err := s.db.Query(queryString, g.ID)
if err != nil {
return nil, err
}
for rows.Next() {
var id int
err = rows.Scan(&id)
if err != nil {
log.Println(err)
continue
}
item, err := ItemService.Item(id, user)
if err != nil {
log.Println(err)
continue
}
items = append(items, item)
}
return items, nil
}
func (s groupService) GetGroups(user *quartermaster.User) ([]*quartermaster.Group, error) {
var groups []*quartermaster.Group
queryString := "SELECT id FROM groups WHERE owner_id = $1"
rows, err := s.db.Query(queryString, user.ID)
if err != nil {
return nil, err
}
for rows.Next() {
var g *quartermaster.Group
err := rows.Scan(&g.ID)
if err != nil {
log.Println(err)
continue
}
g, err = s.Group(g.ID, user)
if err != nil {
log.Println(err)
continue
}
groups = append(groups, g)
}
return groups, nil
}