package postgres import ( "database/sql" "log" "github.com/dustinpianalto/quartermaster" ) type categoryService struct { db *sql.DB } func (s categoryService) Category(id int, user *quartermaster.User) (*quartermaster.Category, error) { var c quartermaster.Category queryString := "SELECT id, name, description FROM categories WHERE id = $1 AND owner_id = $2" row := s.db.QueryRow(queryString, id, user.ID) err := row.Scan(&c.ID, &c.Name, &c.Description) if err != nil { return nil, err } return &c, nil } func (s categoryService) AddCategory(c *quartermaster.Category, user *quartermaster.User) (*quartermaster.Category, error) { queryString := "INSERT INTO categories (name, description, owner_id) VALUES ($1, $2, $3) RETURNING id" err := s.db.QueryRow(queryString, c.Name, c.Description, user.ID).Scan(&c.ID) return c, err } func (s categoryService) UpdateCategory(c *quartermaster.Category, user *quartermaster.User) error { queryString := "UPDATE categories SET name = $2, description = $3 WHERE id = $1 AND owner_id = $4" _, err := s.db.Exec(queryString, c.ID, c.Name, c.Description, user.ID) return err } func (s categoryService) DeleteCategory(c *quartermaster.Category, user *quartermaster.User) error { queryString := "DELETE FROM categories WHERE id = $1 AND owner_id = $2" _, err := s.db.Exec(queryString, c.ID, user.ID) return err } func (s categoryService) GetItems(c *quartermaster.Category, user *quartermaster.User) ([]*quartermaster.Item, error) { var items []*quartermaster.Item queryString := "SELECT item_id FROM x_items_categories WHERE category_id = $1" rows, err := s.db.Query(queryString, c.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 categoryService) GetCategories(user *quartermaster.User) ([]*quartermaster.Category, error) { var categories []*quartermaster.Category queryString := "SELECT id FROM categories WHERE owner_id = $1" rows, err := s.db.Query(queryString, user.ID) if err != nil { return nil, err } for rows.Next() { var c *quartermaster.Category err := rows.Scan(&c.ID) if err != nil { log.Println(err) continue } c, err = s.Category(c.ID, user) if err != nil { log.Println(err) continue } categories = append(categories, c) } return categories, nil }