154 lines
2.9 KiB
Go
154 lines
2.9 KiB
Go
package db
|
|
|
|
import (
|
|
"database/sql"
|
|
"encoding/json"
|
|
)
|
|
|
|
func CreateClient() (db *sql.DB, err error) {
|
|
return sql.Open("sqlite3", "./example.db")
|
|
}
|
|
|
|
func GetAllItems() (rows *sql.Rows, err error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
rows, err = db.Query("SELECT * FROM items")
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
// fmt.Println("rows", rows)
|
|
|
|
defer rows.Close()
|
|
return
|
|
}
|
|
|
|
func GetAll(table EntityLabel) (rows *sql.Rows, err error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
rows, err = db.Query("SELECT * FROM ?", table)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer rows.Close()
|
|
return
|
|
}
|
|
|
|
func GetByID(table EntityLabel, id int) (row *sql.Row, err error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
row = db.QueryRow("SELECT * FROM ? WHERE id = ?", table, id)
|
|
return
|
|
}
|
|
|
|
func Put[T Entity](table EntityLabel, record Entity) (sql.Result, error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
query := `UPDATE ? SET name = ?, notes = ?, description = ?, stage = ?, category = ? WHERE id = ?`
|
|
|
|
result, err := db.Exec(query, table, record.Name, record.Notes, record.Description, record.Stage, record.Category, record.ID)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return result, nil
|
|
}
|
|
|
|
func PostItem(record Item) (sql.Result, error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
query := `INSERT INTO items (name, notes, description, stage, category)
|
|
VALUES (?, ?, ?, ?, ?)`
|
|
|
|
result, err := db.Exec(query, record.Name, record.Notes, record.Description, record.Stage, record.Category)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return result, nil
|
|
}
|
|
|
|
func PostBox(record Box) (sql.Result, error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
query := `INSERT INTO boxes (name, notes, description, stage, category)
|
|
VALUES (?, ?, ?, ?, ?)`
|
|
|
|
result, err := db.Exec(query, record.Name, record.Notes, record.Description, record.Stage, record.Category)
|
|
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return result, nil
|
|
}
|
|
|
|
func Delete(table EntityLabel, id int) (sql.Result, error) {
|
|
db, err := CreateClient()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
defer db.Close()
|
|
|
|
query := `DELETE FROM ? WHERE id = ?`
|
|
|
|
return db.Exec(query, table, id)
|
|
}
|
|
|
|
func ParseItem(item *Item, scan func(dest ...any) error) (err error) {
|
|
return scan(&item.ID, &item.Name, &item.Notes, &item.Description, &item.Stage, &item.Category)
|
|
}
|
|
|
|
func ParseBox(box *Box, scan func(dest ...any) error) error {
|
|
return scan(&box.ID, &box.Name, &box.Notes, &box.Description, &box.Stage, &box.Category)
|
|
}
|
|
|
|
func ParseEntityFromBytes(b []byte) (entity Entity, err error) {
|
|
err = json.Unmarshal(b, &entity)
|
|
return
|
|
}
|
|
|
|
func ParseItemFromBytes(b []byte) (item Item, err error) {
|
|
err = json.Unmarshal(b, &item)
|
|
return
|
|
}
|
|
|
|
func ParseBoxFromBytes(b []byte) (box Box, err error) {
|
|
err = json.Unmarshal(b, &box)
|
|
return
|
|
}
|