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