Extract order parsing logic into reusable function
This commit is contained in:
parent
e11c5b1d52
commit
81b442fcc4
1 changed files with 21 additions and 40 deletions
|
|
@ -1,24 +1,20 @@
|
||||||
package store
|
package store
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"database/sql"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/Bronku/iroon/internal/models"
|
"github.com/Bronku/iroon/internal/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
func (s *Store) GetOrder(id int) (models.Order, error) {
|
func (s *Store) parseOrderRow(row *sql.Rows) (models.Order, error) {
|
||||||
var out models.Order
|
|
||||||
row, err := s.db.Query("select id, name, surname, phone, location, order_date, delivery_date, status, paid from customer_order where id = ?;", id)
|
|
||||||
if err != nil {
|
|
||||||
return out, err
|
|
||||||
}
|
|
||||||
defer row.Close()
|
|
||||||
|
|
||||||
|
var out models.Order
|
||||||
var order_date, delivery_date string
|
var order_date, delivery_date string
|
||||||
row.Next()
|
err := row.Scan(&out.ID, &out.Name, &out.Surname, &out.Phone, &out.Location, &order_date, &delivery_date, &out.Status, &out.Paid)
|
||||||
err = row.Scan(&out.ID, &out.Name, &out.Surname, &out.Phone, &out.Location, &order_date, &delivery_date, &out.Status, &out.Paid)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return out, err
|
return out, err
|
||||||
}
|
}
|
||||||
|
|
@ -26,7 +22,7 @@ func (s *Store) GetOrder(id int) (models.Order, error) {
|
||||||
out.Date, _ = time.Parse("2006-01-02 15:04", delivery_date)
|
out.Date, _ = time.Parse("2006-01-02 15:04", delivery_date)
|
||||||
|
|
||||||
out.Cakes = make([]models.Cake, 0)
|
out.Cakes = make([]models.Cake, 0)
|
||||||
rows, err := s.db.Query("select cake, amount from ordered_cake where customer_order = ?;", id)
|
rows, err := s.db.Query("select cake, amount from ordered_cake where customer_order = ?;", out.ID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return out, err
|
return out, err
|
||||||
}
|
}
|
||||||
|
|
@ -49,6 +45,17 @@ func (s *Store) GetOrder(id int) (models.Order, error) {
|
||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *Store) GetOrder(id int) (models.Order, error) {
|
||||||
|
var out models.Order
|
||||||
|
row, err := s.db.Query("select id, name, surname, phone, location, order_date, delivery_date, status, paid from customer_order where id = ?;", id)
|
||||||
|
if err != nil {
|
||||||
|
return out, err
|
||||||
|
}
|
||||||
|
defer row.Close()
|
||||||
|
row.Next()
|
||||||
|
return s.parseOrderRow(row)
|
||||||
|
}
|
||||||
|
|
||||||
func (s *Store) GetTopOrders() ([]models.Order, error) {
|
func (s *Store) GetTopOrders() ([]models.Order, error) {
|
||||||
var out []models.Order
|
var out []models.Order
|
||||||
rows, err := s.db.Query("select id, name, surname, phone, location, order_date, delivery_date, status, paid from customer_order;")
|
rows, err := s.db.Query("select id, name, surname, phone, location, order_date, delivery_date, status, paid from customer_order;")
|
||||||
|
|
@ -58,38 +65,12 @@ func (s *Store) GetTopOrders() ([]models.Order, error) {
|
||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
|
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var o models.Order
|
order, err := s.parseOrderRow(rows)
|
||||||
var order_date, delivery_date string
|
|
||||||
err = rows.Scan(&o.ID, &o.Name, &o.Surname, &o.Phone, &o.Location, &order_date, &delivery_date, &o.Status, &o.Paid)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
fmt.Println(err)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
o.Accepted, _ = time.Parse("2006-01-02 15:04", order_date)
|
out = append(out, order)
|
||||||
o.Date, _ = time.Parse("2006-01-02 15:04", delivery_date)
|
|
||||||
|
|
||||||
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 {
|
|
||||||
return out, err
|
|
||||||
}
|
|
||||||
defer rows.Close()
|
|
||||||
for rows.Next() {
|
|
||||||
var newCake models.Cake
|
|
||||||
err = rows.Scan(&newCake.ID, &newCake.Amount)
|
|
||||||
if err != nil {
|
|
||||||
return out, err
|
|
||||||
}
|
|
||||||
cakeData, err := s.GetCake(newCake.ID)
|
|
||||||
if err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
newCake.Name = cakeData.Name
|
|
||||||
newCake.Price = cakeData.Price
|
|
||||||
o.Cakes = append(o.Cakes, newCake)
|
|
||||||
}
|
|
||||||
|
|
||||||
out = append(out, o)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return out, nil
|
return out, nil
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue