Implement getCake endpoint and update memdb

This commit is contained in:
bronku 2025-03-20 10:35:39 +01:00
parent d5c6cd4dc0
commit 262b586d0a
2 changed files with 26 additions and 26 deletions

View file

@ -4,7 +4,6 @@ package main
import (
"database/sql"
_ "embed"
"fmt"
"os"
"strconv"
"time"
@ -21,7 +20,7 @@ type store struct {
func NewStore(filename string) (*store, error) {
var out store
var err error
if filename != ":memory:" {
if filename != ":memory:" && filename != "file:memdb1?mode=memory&cache=shared" {
os.Remove(filename)
}
// #todo: handle the error
@ -42,6 +41,17 @@ func (s *store) close() {
s.db.Close()
}
func (s *store) getCake(id int) (cake, error) {
out := cake{ID: id}
row, err := s.db.Query("select name, price from cake where id = ?;", id)
if err != nil {
return out, err
}
row.Next()
err = row.Scan(&out.Name, &out.Price)
return out, err
}
func (s *store) getCakes() ([]cake, error) {
rows, err := s.db.Query("select id, name, price from cake")
if err != nil {
@ -222,26 +232,3 @@ func (s *store) saveOrder(newOrder order) (int, error) {
return newOrder.ID, err
}
func listTables(db *sql.DB) error {
rows, err := db.Query("SELECT name FROM sqlite_master WHERE type='table';")
if err != nil {
return fmt.Errorf("error querying sqlite_master: %w", err)
}
defer rows.Close()
fmt.Println("Tables in the database:")
for rows.Next() {
var tableName string
if err := rows.Scan(&tableName); err != nil {
return fmt.Errorf("error scanning table name: %w", err)
}
fmt.Println("-", tableName)
}
if err := rows.Err(); err != nil {
return fmt.Errorf("error iterating through rows: %w", err)
}
return nil
}

View file

@ -6,7 +6,7 @@ import (
)
func TestStore(t *testing.T) {
s, err := NewStore(":memory:")
s, err := NewStore("file:memdb1?mode=memory&cache=shared")
if err != nil {
t.Fatalf("Failed to create store: %v", err)
}
@ -96,6 +96,19 @@ func TestStore(t *testing.T) {
t.Errorf("Want %v\nGot %v", anotherCake, cakes)
}
selectedCake, err := s.getCake(newCake.ID)
if err != nil {
t.Error("error getting a cake", err)
}
if selectedCake.ID != newCake.ID || selectedCake.Name != newCake.Name || selectedCake.Price != newCake.Price {
t.Errorf("Want %v\nGot %v", newCake, selectedCake)
}
selectedCake, err = s.getCake(-1)
if err == nil {
t.Error("no error getting a non-existant cake")
}
// create new order
now := time.Now()
newOrder := order{