Files
go-htmx-tailwind-example/db/sql.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()
}