353 lines
6.1 KiB
Go
353 lines
6.1 KiB
Go
package db
|
|
|
|
import (
|
|
"database/sql"
|
|
)
|
|
|
|
func CreateClient() (db *sql.DB, err error) {
|
|
return sql.Open("sqlite3", "./example.db")
|
|
}
|
|
|
|
func GetAllItems() (result []Item, err error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
rows, err := db.Query("SELECT * FROM items")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer rows.Close()
|
|
|
|
for rows.Next() {
|
|
item := Item{}
|
|
|
|
err = rows.Scan(&item.ID, &item.Name, &item.Notes, &item.Description, &item.Stage, &item.Category)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result = append(result, item)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func GetAllBoxes() (result []Box, err error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
rows, err := db.Query("SELECT * FROM boxes")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer rows.Close()
|
|
|
|
for rows.Next() {
|
|
box := Box{}
|
|
|
|
err = rows.Scan(&box.ID, &box.Name, &box.Notes, &box.Description, &box.Stage, &box.Category)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result = append(result, box)
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func GetAllBoxItems() ([]BoxItem, error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
rows, err := db.Query("SELECT * FROM box_items")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer rows.Close()
|
|
|
|
var result []BoxItem
|
|
|
|
for rows.Next() {
|
|
boxItem := BoxItem{}
|
|
|
|
err = rows.Scan(&boxItem.ID, &boxItem.BoxID, &boxItem.ItemID)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result = append(result, boxItem)
|
|
}
|
|
|
|
return result, nil
|
|
}
|
|
|
|
func GetItemByID(id int) (item Item, err error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return Item{}, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
row := db.QueryRow("SELECT * FROM items WHERE id = ?", id)
|
|
err = row.Scan(&item.ID, &item.Name, &item.Notes, &item.Description, &item.Stage, &item.Category)
|
|
|
|
return
|
|
}
|
|
|
|
func GetBoxByID(id int) (box Box, err error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return Box{}, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
row := db.QueryRow("SELECT * FROM boxes WHERE id = ?", id)
|
|
err = row.Scan(&box.ID, &box.Name, &box.Notes, &box.Description, &box.Stage, &box.Category)
|
|
|
|
return
|
|
}
|
|
|
|
func GetBoxItemByID(id int) (BoxItem, error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return BoxItem{}, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
row := db.QueryRow("SELECT * FROM box_items WHERE id = ?", id)
|
|
|
|
boxItem := BoxItem{}
|
|
|
|
err = row.Scan(&boxItem.ID, &boxItem.BoxID, &boxItem.ItemID)
|
|
|
|
return boxItem, err
|
|
}
|
|
|
|
func GetBoxItemsByBoxID(boxID int) ([]BoxItemWithItemInfo, error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
// get all rows from box_items where boxid = boxID
|
|
// also get the item info for each item
|
|
rows, err := db.Query(
|
|
"SELECT id, items.name, items.stage, items.category FROM boxitems JOIN items ON itemid=items.id WHERE boxid = ?",
|
|
boxID)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer rows.Close()
|
|
|
|
result := []BoxItemWithItemInfo{}
|
|
|
|
for rows.Next() {
|
|
boxItem := BoxItemWithItemInfo{}
|
|
if err = rows.Scan(&boxItem.ID, &boxItem.Name, &boxItem.Stage, &boxItem.Category); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result = append(result, boxItem)
|
|
}
|
|
|
|
return result, nil
|
|
}
|
|
|
|
func PostItem(item Item) (int64, error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
query := `INSERT INTO items (name, notes, description, stage, category)
|
|
VALUES (?, ?, ?, ?, ?)`
|
|
|
|
result, err := db.Exec(query, item.Name, item.Notes, item.Description, item.Stage, item.Category)
|
|
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
return result.LastInsertId()
|
|
}
|
|
|
|
func PostBox(box Box) (int64, error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
query := `INSERT INTO boxes (name, notes, description, stage, category) VALUES (?, ?, ?, ?, ?)`
|
|
|
|
result, err := db.Exec(query, box.Name, box.Notes, box.Description, box.Stage, box.Category)
|
|
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
return result.LastInsertId()
|
|
}
|
|
|
|
func PostBoxItem(boxItem BoxItem) (int64, error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
query := `INSERT INTO box_items (boxid, item_id) VALUES (?, ?)`
|
|
|
|
result, err := db.Exec(query, boxItem.BoxID, boxItem.ItemID)
|
|
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
return result.LastInsertId()
|
|
}
|
|
|
|
func PutItem(item Item) (int64, error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
query := `UPDATE items SET name = ?, notes = ?, description = ?, stage = ?, category = ? WHERE id = ?`
|
|
|
|
result, err := db.Exec(query, item.Name, item.Notes, item.Description, item.Stage, item.Category, item.ID)
|
|
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
return result.RowsAffected()
|
|
}
|
|
|
|
func PutBox(box Box) (int64, error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
query := `UPDATE boxes SET name = ?, notes = ?, description = ?, stage = ?, category = ? WHERE id = ?`
|
|
|
|
result, err := db.Exec(query, box.Name, box.Notes, box.Description, box.Stage, box.Category, box.ID)
|
|
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
return result.RowsAffected()
|
|
}
|
|
|
|
func PutBoxItem(boxItem BoxItem) (int64, error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
query := `UPDATE box_items SET boxid = ?, item_id = ? WHERE id = ?`
|
|
|
|
result, err := db.Exec(query, boxItem.BoxID, boxItem.ItemID, boxItem.ID)
|
|
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
return result.RowsAffected()
|
|
}
|
|
|
|
func DeleteItem(id int) (int64, error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
query := `DELETE FROM items WHERE id = ?`
|
|
|
|
result, err := db.Exec(query, id)
|
|
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
return result.RowsAffected()
|
|
}
|
|
|
|
func DeleteBox(id int) (int64, error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
query := `DELETE FROM boxes WHERE id = ?`
|
|
|
|
result, err := db.Exec(query, id)
|
|
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
return result.RowsAffected()
|
|
}
|
|
|
|
func DeleteBoxItem(id int) (int64, error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
query := `DELETE FROM box_items WHERE id = ?`
|
|
|
|
result, err := db.Exec(query, id)
|
|
|
|
if err != nil {
|
|
return -1, err
|
|
}
|
|
|
|
return result.RowsAffected()
|
|
}
|