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/categories.go

66 lines
1.7 KiB

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
}