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.
66 lines
1.7 KiB
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
|
|
}
|