From 262b586d0a07b0d1d5616b5a980f6e98be0c100a Mon Sep 17 00:00:00 2001 From: bronku Date: Thu, 20 Mar 2025 10:35:39 +0100 Subject: [PATCH] Implement getCake endpoint and update memdb --- store.go | 37 ++++++++++++------------------------- store_test.go | 15 ++++++++++++++- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/store.go b/store.go index ae160af..1e074b0 100644 --- a/store.go +++ b/store.go @@ -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 -} diff --git a/store_test.go b/store_test.go index 087ecfa..593b0c8 100644 --- a/store_test.go +++ b/store_test.go @@ -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{