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.
90 lines
2.4 KiB
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
|
|
}
|