hatecomputers.club/database/kennel.go

151 lines
3.7 KiB
Go
Raw Normal View History

2024-08-15 03:12:01 -04:00
package database
import (
"database/sql"
_ "github.com/mattn/go-sqlite3"
"log"
"time"
)
type KennelCat struct {
ID string `json:"id"`
UserID string `json:"user_id"`
2024-08-16 02:21:10 -04:00
Name string `json:"name"`
2024-08-15 03:12:01 -04:00
Link string `json:"link"`
Description string `json:"description"`
Spritesheet string `json:"spritesheet"`
CreatedAt time.Time `json:"created_at"`
}
type KennelState struct {
At time.Time `json:"at"`
EncodedState string `json:"state"`
}
func CountUserKennelCats(db *sql.DB, userID string) (int, error) {
log.Println("counting kennel cats for user", userID)
row := db.QueryRow("SELECT COUNT(*) FROM kennel_cat WHERE user_id = ?", userID)
var count int
err := row.Scan(&count)
if err != nil {
return 0, err
}
return count, nil
}
func GetUserKennelCats(db *sql.DB, userID string) ([]KennelCat, error) {
log.Println("getting kennel cats for user", userID)
rows, err := db.Query("SELECT * FROM kennel_cat WHERE user_id = ?", userID)
if err != nil {
return nil, err
}
defer rows.Close()
var cats []KennelCat
for rows.Next() {
var cat KennelCat
2024-08-16 02:21:10 -04:00
err := rows.Scan(&cat.ID, &cat.Name, &cat.UserID, &cat.Link, &cat.Description, &cat.Spritesheet, &cat.CreatedAt)
2024-08-15 03:12:01 -04:00
if err != nil {
return nil, err
}
cats = append(cats, cat)
}
return cats, nil
}
func SaveKennelCat(db *sql.DB, cat *KennelCat) (*KennelCat, error) {
log.Println("saving kennel cat", cat.ID)
if (cat.CreatedAt == time.Time{}) {
cat.CreatedAt = time.Now()
}
2024-08-16 02:21:10 -04:00
_, err := db.Exec("INSERT OR REPLACE INTO kennel_cat (id, user_id, name, link, description, spritesheet, created_at) VALUES (?, ?, ?, ?, ?, ?, ?)", cat.ID, cat.UserID, cat.Name, cat.Link, cat.Description, cat.Spritesheet, cat.CreatedAt)
2024-08-15 03:12:01 -04:00
if err != nil {
return nil, err
}
return cat, nil
}
func GetKennelCat(db *sql.DB, catID string) (*KennelCat, error) {
log.Println("getting kennel cat", catID)
row := db.QueryRow("SELECT * FROM kennel_cat WHERE id = ?", catID)
var cat KennelCat
2024-08-16 02:21:10 -04:00
err := row.Scan(&cat.ID, &cat.Name, &cat.UserID, &cat.Link, &cat.Description, &cat.Spritesheet, &cat.CreatedAt)
2024-08-15 03:12:01 -04:00
if err != nil {
return nil, err
}
return &cat, nil
}
func DeleteKennelCat(db *sql.DB, catID string) error {
log.Println("deleting kennel cat", catID)
_, err := db.Exec("DELETE FROM kennel_cat WHERE id = ?", catID)
if err != nil {
return err
}
return nil
}
func GetKennel(dbConn *sql.DB) ([]KennelCat, error) {
log.Println("getting kennel")
rows, err := dbConn.Query("SELECT * FROM kennel_cat")
if err != nil {
return nil, err
}
defer rows.Close()
var cats []KennelCat
for rows.Next() {
var cat KennelCat
2024-08-16 02:21:10 -04:00
err := rows.Scan(&cat.ID, &cat.Name, &cat.UserID, &cat.Link, &cat.Description, &cat.Spritesheet, &cat.CreatedAt)
2024-08-15 03:12:01 -04:00
if err != nil {
return nil, err
}
cats = append(cats, cat)
}
return cats, nil
}
2024-08-16 02:21:10 -04:00
func GetLatestKennelState(dbConn *sql.DB) (*KennelState, error) {
2024-08-15 03:12:01 -04:00
log.Println("getting kennel state")
2024-08-16 02:21:10 -04:00
row := dbConn.QueryRow("SELECT * FROM kennel_state ORDER BY at DESC LIMIT 1")
var state KennelState
err := row.Scan(&state.At, &state.EncodedState)
if err != nil {
return nil, err
}
return &state, nil
}
func GetKennelStateAt(dbConn *sql.DB, at int64) (*KennelState, error) {
log.Println("getting kennel state at", at)
row := dbConn.QueryRow("SELECT * FROM kennel_state WHERE at = ?", at)
2024-08-15 03:12:01 -04:00
var state KennelState
err := row.Scan(&state.At, &state.EncodedState)
if err != nil {
return nil, err
}
return &state, nil
}
func SaveKennelState(dbConn *sql.DB, state *KennelState) (*KennelState, error) {
log.Println("saving kennel state")
_, err := dbConn.Exec("INSERT OR REPLACE INTO kennel_state (at, state) VALUES (?, ?)", state.At, state.EncodedState)
if err != nil {
return nil, err
}
return state, nil
}