From 7ee564f6b2cbfe832d316eb21ed632666b8e9a2f Mon Sep 17 00:00:00 2001 From: bronku Date: Fri, 28 Mar 2025 14:54:17 +0100 Subject: [PATCH] Move Cake struct to separate models package --- internal/models/data.go | 10 ++++++++++ internal/server/get.go | 5 +++-- internal/server/post.go | 5 +++-- internal/store/cake.go | 31 ++++++++++++------------------- internal/store/order.go | 12 +++++++----- internal/store/store.go | 3 ++- internal/store/store_test.go | 20 +++++++++++--------- 7 files changed, 48 insertions(+), 38 deletions(-) create mode 100644 internal/models/data.go diff --git a/internal/models/data.go b/internal/models/data.go new file mode 100644 index 0000000..d3f0468 --- /dev/null +++ b/internal/models/data.go @@ -0,0 +1,10 @@ +package models + +type Cake struct { + Name string + ID int + Price int + Amount int + Category string + Availability string +} diff --git a/internal/server/get.go b/internal/server/get.go index a019f03..4085e30 100644 --- a/internal/server/get.go +++ b/internal/server/get.go @@ -5,6 +5,7 @@ import ( "strconv" "strings" + "github.com/Bronku/iroon/internal/models" "github.com/Bronku/iroon/internal/store" ) @@ -21,7 +22,7 @@ func (h *Server) cakes(r *http.Request) (any, int, error) { func (h *Server) cake(r *http.Request) (any, int, error) { url := strings.Split(r.URL.String(), "/") if len(url) < 3 || url[2] == "" { - return store.Cake{}, http.StatusOK, nil + return models.Cake{}, http.StatusOK, nil } id, err := strconv.Atoi(url[2]) @@ -40,7 +41,7 @@ func (h *Server) cake(r *http.Request) (any, int, error) { func (h *Server) order(r *http.Request) (any, int, error) { type formData struct { Order store.Order - Catalogue []store.Cake + Catalogue []models.Cake } var err error var data formData diff --git a/internal/server/post.go b/internal/server/post.go index c0a3692..b27aa13 100644 --- a/internal/server/post.go +++ b/internal/server/post.go @@ -7,6 +7,7 @@ import ( "strings" "time" + "github.com/Bronku/iroon/internal/models" "github.com/Bronku/iroon/internal/store" ) @@ -16,7 +17,7 @@ func (h *Server) postCake(r *http.Request) (any, int, error) { return nil, http.StatusInternalServerError, err } - var n store.Cake + var n models.Cake n.ID, err = strconv.Atoi(r.FormValue("id")) if err != nil { return nil, http.StatusBadRequest, err @@ -58,7 +59,7 @@ func (h *Server) postOrder(r *http.Request) (any, int, error) { return nil, http.StatusBadRequest, err } - n.Cakes = make([]store.Cake, 0) + n.Cakes = make([]models.Cake, 0) for _, e := range cakes { e.Amount, err = strconv.Atoi(r.FormValue(fmt.Sprintf("cake[%d]", e.ID))) if err != nil { diff --git a/internal/store/cake.go b/internal/store/cake.go index b929b0a..dc53373 100644 --- a/internal/store/cake.go +++ b/internal/store/cake.go @@ -3,16 +3,9 @@ package store import ( "errors" "fmt" -) -type Cake struct { - Name string - ID int - Price int - Amount int - Category string - Availability string -} + "github.com/Bronku/iroon/internal/models" +) func (s *Store) cakeCount() int { out := 0 @@ -26,8 +19,8 @@ func (s *Store) cakeCount() int { return out } -func (s *Store) loadCakes() ([]Cake, error) { - out := make([]Cake, 0, s.cakeCount()) +func (s *Store) loadCakes() ([]models.Cake, error) { + out := make([]models.Cake, 0, s.cakeCount()) rows, err := s.db.Query("select id, name, price, category, availability from cake order by id asc;") if err != nil { @@ -36,7 +29,7 @@ func (s *Store) loadCakes() ([]Cake, error) { defer rows.Close() for rows.Next() { - var cake Cake + var cake models.Cake err = rows.Scan(&cake.ID, &cake.Name, &cake.Price, &cake.Category, &cake.Availability) if err != nil { continue @@ -57,25 +50,25 @@ func (s *Store) searchCakes(id int) (int, error) { return 0, errors.New("cake not found") } -func (s *Store) GetCake(id int) (Cake, error) { +func (s *Store) GetCake(id int) (models.Cake, error) { if id <= 0 { - return Cake{}, errors.New("Invalid cake id") + return models.Cake{}, errors.New("Invalid cake id") } i, err := s.searchCakes(id) if err != nil { - return Cake{}, err + return models.Cake{}, err } return s.cakes[i], err } -func (s *Store) GetCakes() ([]Cake, error) { - result := make([]Cake, len(s.cakes)) +func (s *Store) GetCakes() ([]models.Cake, error) { + result := make([]models.Cake, len(s.cakes)) copy(result, s.cakes) return result, nil } -func (s *Store) updateCake(newCake Cake) error { +func (s *Store) updateCake(newCake models.Cake) error { query := "update cake set name = ? , price = ?, category = ?, availability = ? where id = ?" _, err := s.db.Exec(query, newCake.Name, newCake.Price, newCake.Category, newCake.Availability, newCake.ID) if err != nil { @@ -95,7 +88,7 @@ func (s *Store) SyncCakes() error { return nil } -func (s *Store) SaveCake(newCake Cake) (int, error) { +func (s *Store) SaveCake(newCake models.Cake) (int, error) { if newCake.ID != 0 { return newCake.ID, s.updateCake(newCake) } diff --git a/internal/store/order.go b/internal/store/order.go index d60e7d5..ee7dbfd 100644 --- a/internal/store/order.go +++ b/internal/store/order.go @@ -4,6 +4,8 @@ import ( "errors" "strconv" "time" + + "github.com/Bronku/iroon/internal/models" ) type Order struct { @@ -16,7 +18,7 @@ type Order struct { Accepted time.Time Status string Paid int // increments of 0.01 - Cakes []Cake + Cakes []models.Cake } func (s *Store) GetOrder(id int) (Order, error) { @@ -36,14 +38,14 @@ func (s *Store) GetOrder(id int) (Order, error) { out.Accepted, _ = time.Parse("2006-01-02 15:04", order_date) out.Date, _ = time.Parse("2006-01-02 15:04", delivery_date) - out.Cakes = make([]Cake, 0) + out.Cakes = make([]models.Cake, 0) rows, err := s.db.Query("select cake, amount from ordered_cake where customer_order = ?;", id) if err != nil { return out, err } defer rows.Close() for rows.Next() { - var newCake Cake + var newCake models.Cake err = rows.Scan(&newCake.ID, &newCake.Amount) if err != nil { return out, err @@ -78,7 +80,7 @@ func (s *Store) GetOrders() ([]Order, error) { o.Accepted, _ = time.Parse("2006-01-02 15:04", order_date) o.Date, _ = time.Parse("2006-01-02 15:04", delivery_date) - o.Cakes = make([]Cake, 0) + o.Cakes = make([]models.Cake, 0) rows, err := s.db.Query("select cake, amount from ordered_cake where customer_order = ?;", o.ID) if err != nil { @@ -86,7 +88,7 @@ func (s *Store) GetOrders() ([]Order, error) { } defer rows.Close() for rows.Next() { - var newCake Cake + var newCake models.Cake err = rows.Scan(&newCake.ID, &newCake.Amount) if err != nil { return out, err diff --git a/internal/store/store.go b/internal/store/store.go index 226c701..6fa37b4 100644 --- a/internal/store/store.go +++ b/internal/store/store.go @@ -4,12 +4,13 @@ import ( "database/sql" "log" + "github.com/Bronku/iroon/internal/models" _ "github.com/mattn/go-sqlite3" ) type Store struct { db *sql.DB - cakes []Cake + cakes []models.Cake } func OpenStore(filename string) *Store { diff --git a/internal/store/store_test.go b/internal/store/store_test.go index 54ec78b..fbdeb69 100644 --- a/internal/store/store_test.go +++ b/internal/store/store_test.go @@ -3,6 +3,8 @@ package store import ( "testing" "time" + + "github.com/Bronku/iroon/internal/models" ) func TestStore(t *testing.T) { @@ -26,7 +28,7 @@ func TestStore(t *testing.T) { } // create new cake - newCake := Cake{Name: "Chocolate Cake", Price: 2500} + newCake := models.Cake{Name: "Chocolate Cake", Price: 2500} newCake.ID, err = s.SaveCake(newCake) if err != nil { t.Fatalf("Failed to save new cake: %v", err) @@ -36,7 +38,7 @@ func TestStore(t *testing.T) { } // create another cake - anotherCake := Cake{Name: "Another Cake", Price: 3000} + anotherCake := models.Cake{Name: "Another Cake", Price: 3000} anotherCake.ID, err = s.SaveCake(anotherCake) if err != nil { t.Fatalf("Failed to save new cake: %v", err) @@ -57,7 +59,7 @@ func TestStore(t *testing.T) { } // Update Non-existing Cake - var updatedCake Cake + var updatedCake models.Cake updatedCake.ID = 10 _, err = s.SaveCake(updatedCake) if err == nil { @@ -117,7 +119,7 @@ func TestStore(t *testing.T) { Date: now.Add(time.Hour * 24), Status: "Pending", Paid: 1000, - Cakes: []Cake{{ID: newCake.ID, Amount: 2}, {ID: anotherCake.ID, Amount: 10}}, + Cakes: []models.Cake{{ID: newCake.ID, Amount: 2}, {ID: anotherCake.ID, Amount: 10}}, } newOrder.ID, err = s.SaveOrder(newOrder) if err != nil { @@ -137,7 +139,7 @@ func TestStore(t *testing.T) { Date: now.Add(time.Hour * 192), Status: "Accepted", Paid: 1500, - Cakes: []Cake{{ID: newCake.ID, Amount: 100}}, + Cakes: []models.Cake{{ID: newCake.ID, Amount: 100}}, } anotherOrder.ID, err = s.SaveOrder(anotherOrder) if err != nil { @@ -243,13 +245,13 @@ func TestStore(t *testing.T) { } func TestSliceComparison(t *testing.T) { - a := []Cake{ + a := []models.Cake{ {Name: "ok", Price: 100, ID: 12, Amount: 10}, {Name: "ok", Price: 11, ID: 13, Amount: 1}, {Name: "ok", Price: 100, ID: 10, Amount: 11}, } - b := []Cake{ + b := []models.Cake{ {Name: "okas", Price: 110, ID: 12, Amount: 10}, {Name: "oksa", Price: 11, ID: 13, Amount: 1}, {Name: "oasdk", Price: 101, ID: 10, Amount: 11}, @@ -259,11 +261,11 @@ func TestSliceComparison(t *testing.T) { } } -func areCakesEqual(a, b Cake) bool { +func areCakesEqual(a, b models.Cake) bool { return a.ID == b.ID && a.Amount == b.Amount } -func areCakeSlicesEqual(a, b []Cake) bool { +func areCakeSlicesEqual(a, b []models.Cake) bool { if len(a) != len(b) { return false }