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 }