diff --git a/internal/store/cake.go b/internal/store/cake.go index c079f1f..cfaf659 100644 --- a/internal/store/cake.go +++ b/internal/store/cake.go @@ -22,7 +22,7 @@ func (s *Store) cakeCount() int { 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;") + rows, err := s.db.Query("select id, name, price, category, availability from cake order by id;") if err != nil { return out, err } @@ -88,20 +88,18 @@ func (s *Store) SaveCake(newCake models.Cake) (int, error) { return newCake.ID, s.updateCake(newCake) } fmt.Println("adding a new cake", newCake) - query := "insert into cake(name, price, category, availability) values (?, ?, ?, ?) returning id;" - rows, err := s.db.Query(query, newCake.Name, newCake.Price, newCake.Category, newCake.Availability) - if err != nil { - return 0, err - } - defer rows.Close() - if !rows.Next() { - return 0, errors.New("query didn't return the cake id") - } - err = rows.Scan(&newCake.ID) + query := "insert into cake(name, price, category, availability) values (?, ?, ?, ?);" + result, err := s.db.Exec(query, newCake.Name, newCake.Price, newCake.Category, newCake.Availability) if err != nil { return 0, err } + id, err := result.LastInsertId() + if err != nil { + return 0, err + } + newCake.ID = int(id) + s.cakes = append(s.cakes, newCake) return newCake.ID, nil } diff --git a/internal/store/order.go b/internal/store/order.go index af3f840..6484f7c 100644 --- a/internal/store/order.go +++ b/internal/store/order.go @@ -10,6 +10,8 @@ import ( "github.com/Bronku/iroon/internal/models" ) +// #todo update labels in templates + func (s *Store) parseOrderRow(row *sql.Rows) (models.Order, error) { var out models.Order var orderDate, deliveryDate string @@ -117,10 +119,10 @@ func (s *Store) UpdateOrderContents(tx *sql.Tx, newOrder models.Order) error { } func (s *Store) SaveOrder(newOrder models.Order) (int, error) { - query := "insert into customer_order(name, surname, phone, location, order_date, delivery_date, status, paid) values (?, ?, ?, ?, ?, ?, ?, ?) returning id;" + query := "insert into customer_order(name, surname, phone, location, order_date, delivery_date, status, paid) values (?, ?, ?, ?, ?, ?, ?, ?);" if newOrder.ID != 0 { query = "update customer_order set name = ?, surname = ?, phone = ?, location = ?, order_date = ?, delivery_date = ?, status = ?, paid = ? where id = " - query += strconv.Itoa(newOrder.ID) + " returning id;" + query += strconv.Itoa(newOrder.ID) + " ;" } tx, err := s.db.Begin() if err != nil { @@ -129,22 +131,18 @@ func (s *Store) SaveOrder(newOrder models.Order) (int, error) { accepted := newOrder.Accepted.Format("2006-01-02 15:04") date := newOrder.Date.Format("2006-01-02 15:04") - row, err := tx.Query(query, newOrder.Name, newOrder.Surname, newOrder.Phone, newOrder.Location, accepted, date, newOrder.Status, newOrder.Paid) + result, err := tx.Exec(query, newOrder.Name, newOrder.Surname, newOrder.Phone, newOrder.Location, accepted, date, newOrder.Status, newOrder.Paid) if err != nil { _ = tx.Rollback() return 0, err } - defer row.Close() - if !row.Next() { - _ = tx.Rollback() - return 0, errors.New("the database didn't respond with an id") - } - err = row.Scan(&newOrder.ID) + id, err := result.LastInsertId() if err != nil { _ = tx.Rollback() return newOrder.ID, err } + newOrder.ID = int(id) err = s.UpdateOrderContents(tx, newOrder) if err != nil {