Skip to content
Snippets Groups Projects
Commit 62a25461 authored by meskio's avatar meskio :tent:
Browse files

Add /order/picks API

parent 7ef17346
Branches
No related tags found
No related merge requests found
...@@ -61,6 +61,7 @@ func Init(dbPath string, signKey string, mail *Mail, r *mux.Router) error { ...@@ -61,6 +61,7 @@ func Init(dbPath string, signKey string, mail *Mail, r *mux.Router) error {
r.HandleFunc("/order/{id:[0-9]+}", a.authNum(a.GetOrder)).Methods("GET") r.HandleFunc("/order/{id:[0-9]+}", a.authNum(a.GetOrder)).Methods("GET")
r.HandleFunc("/order/{id:[0-9]+}", a.authNumRole(a.DeleteOrder)).Methods("DELETE") r.HandleFunc("/order/{id:[0-9]+}", a.authNumRole(a.DeleteOrder)).Methods("DELETE")
r.HandleFunc("/order/active", a.auth(a.ListActiveOrders)).Methods("GET") r.HandleFunc("/order/active", a.auth(a.ListActiveOrders)).Methods("GET")
r.HandleFunc("/order/picks", a.authNum(a.ListOrderPicks)).Methods("GET")
r.HandleFunc("/order/{id:[0-9]+}/purchase", a.authNum(a.AddOrderPurchase)).Methods("POST") r.HandleFunc("/order/{id:[0-9]+}/purchase", a.authNum(a.AddOrderPurchase)).Methods("POST")
return nil return nil
} }
...@@ -43,6 +43,15 @@ func (d *DB) ListOrders(active bool) (orders []Order, err error) { ...@@ -43,6 +43,15 @@ func (d *DB) ListOrders(active bool) (orders []Order, err error) {
return return
} }
func (d *DB) ListOrderPicks(num int) (orders []Order, err error) {
err = d.db.Select("*, member = ? as member_selected", num).
Table("(?) as orders", d.db.Model(&Order{}).Order("deadline desc")).
Group("name").Order("member_selected desc, deadline desc").Limit(15).
Preload(clause.Associations).
Find(&orders).Error
return
}
func (d *DB) GetOrder(memberNum int, id int) (order Order, transaction Transaction, err error) { func (d *DB) GetOrder(memberNum int, id int) (order Order, transaction Transaction, err error) {
err = d.db.Preload(clause.Associations). err = d.db.Preload(clause.Associations).
Preload("Transactions.OrderPurchase"). Preload("Transactions.OrderPurchase").
......
...@@ -56,6 +56,23 @@ func (a *api) listOrders(active bool, w http.ResponseWriter, req *http.Request) ...@@ -56,6 +56,23 @@ func (a *api) listOrders(active bool, w http.ResponseWriter, req *http.Request)
} }
} }
func (a *api) ListOrderPicks(num int, w http.ResponseWriter, req *http.Request) {
orders, err := a.db.ListOrderPicks(num)
if err != nil {
log.Printf("Can't list order picks: %v", err)
w.WriteHeader(http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
err = json.NewEncoder(w).Encode(orders)
if err != nil {
log.Printf("Can't encode order picks: %v", err)
w.WriteHeader(http.StatusInternalServerError)
}
}
func (a *api) GetOrder(num int, w http.ResponseWriter, req *http.Request) { func (a *api) GetOrder(num int, w http.ResponseWriter, req *http.Request) {
vars := mux.Vars(req) vars := mux.Vars(req)
id, _ := strconv.Atoi(vars["id"]) id, _ := strconv.Atoi(vars["id"])
......
...@@ -24,6 +24,7 @@ func TestOrderAddList(t *testing.T) { ...@@ -24,6 +24,7 @@ func TestOrderAddList(t *testing.T) {
tapi := newTestAPI(t) tapi := newTestAPI(t)
defer tapi.close() defer tapi.close()
tapi.addTestMember() tapi.addTestMember()
tapi.addTestProducts()
tapi.addTestOrder() tapi.addTestOrder()
var orders []db.Order var orders []db.Order
...@@ -50,6 +51,7 @@ func TestOrderActive(t *testing.T) { ...@@ -50,6 +51,7 @@ func TestOrderActive(t *testing.T) {
tapi := newTestAPI(t) tapi := newTestAPI(t)
defer tapi.close() defer tapi.close()
tapi.addTestMember() tapi.addTestMember()
tapi.addTestProducts()
tapi.addTestOrder() tapi.addTestOrder()
var orders []db.Order var orders []db.Order
...@@ -70,6 +72,7 @@ func TestOrderDelete(t *testing.T) { ...@@ -70,6 +72,7 @@ func TestOrderDelete(t *testing.T) {
tapi := newTestAPI(t) tapi := newTestAPI(t)
defer tapi.close() defer tapi.close()
tapi.addTestMember() tapi.addTestMember()
tapi.addTestProducts()
order := testOrder order := testOrder
order.Deadline = time.Now().Add(-24 * time.Hour) order.Deadline = time.Now().Add(-24 * time.Hour)
...@@ -95,12 +98,7 @@ func TestOrderDelete(t *testing.T) { ...@@ -95,12 +98,7 @@ func TestOrderDelete(t *testing.T) {
t.Fatal("Can't create order purchase:", resp.Status) t.Fatal("Can't create order purchase:", resp.Status)
} }
dbPath := path.Join(tapi.testPath, "test.db") orders = tapi.deactivateOrders()
database, err := db.Init(dbPath)
if err != nil {
t.Fatal("Can't initialize the db:", err)
}
orders = database.DeactivateOrders()
if len(orders) != 1 { if len(orders) != 1 {
t.Error("Deactivated wrong orders:", orders) t.Error("Deactivated wrong orders:", orders)
} }
...@@ -195,6 +193,7 @@ func TestOrderNoDeactivation(t *testing.T) { ...@@ -195,6 +193,7 @@ func TestOrderNoDeactivation(t *testing.T) {
tapi := newTestAPI(t) tapi := newTestAPI(t)
defer tapi.close() defer tapi.close()
tapi.addTestMember() tapi.addTestMember()
tapi.addTestProducts()
order := testOrder order := testOrder
now := time.Now() now := time.Now()
...@@ -213,12 +212,7 @@ func TestOrderNoDeactivation(t *testing.T) { ...@@ -213,12 +212,7 @@ func TestOrderNoDeactivation(t *testing.T) {
t.Fatal("Didn't find my new order") t.Fatal("Didn't find my new order")
} }
dbPath := path.Join(tapi.testPath, "test.db") orders = tapi.deactivateOrders()
database, err := db.Init(dbPath)
if err != nil {
t.Fatal("Can't initialize the db:", err)
}
orders = database.DeactivateOrders()
if len(orders) != 0 { if len(orders) != 0 {
t.Error("Deactivated some orders:", orders) t.Error("Deactivated some orders:", orders)
} }
...@@ -236,6 +230,7 @@ func TestOrderDeactivation(t *testing.T) { ...@@ -236,6 +230,7 @@ func TestOrderDeactivation(t *testing.T) {
tapi := newTestAPI(t) tapi := newTestAPI(t)
defer tapi.close() defer tapi.close()
tapi.addTestMember() tapi.addTestMember()
tapi.addTestProducts()
order := testOrder order := testOrder
order.Deadline = time.Now().Add(-24 * time.Hour) order.Deadline = time.Now().Add(-24 * time.Hour)
...@@ -313,6 +308,7 @@ func TestGetOrder(t *testing.T) { ...@@ -313,6 +308,7 @@ func TestGetOrder(t *testing.T) {
tapi := newTestAPI(t) tapi := newTestAPI(t)
defer tapi.close() defer tapi.close()
tapi.addTestMember() tapi.addTestMember()
tapi.addTestProducts()
tapi.addTestOrder() tapi.addTestOrder()
var orders []db.Order var orders []db.Order
...@@ -364,6 +360,7 @@ func TestUpdateOrderPurchase(t *testing.T) { ...@@ -364,6 +360,7 @@ func TestUpdateOrderPurchase(t *testing.T) {
tapi := newTestAPI(t) tapi := newTestAPI(t)
defer tapi.close() defer tapi.close()
tapi.addTestMember() tapi.addTestMember()
tapi.addTestProducts()
tapi.addTestOrder() tapi.addTestOrder()
var orders []db.Order var orders []db.Order
...@@ -423,9 +420,49 @@ func TestUpdateOrderPurchase(t *testing.T) { ...@@ -423,9 +420,49 @@ func TestUpdateOrderPurchase(t *testing.T) {
} }
} }
func TestOrderPicks(t *testing.T) {
tapi := newTestAPI(t)
defer tapi.close()
tapi.addTestMember()
tapi.addTestProducts()
tapi.addTestOrder()
testOrderOld := testOrder
testOrderOld.Deadline = time.Now().Add(-24 * time.Hour)
resp := tapi.do("POST", "/order", testOrderOld, nil)
if resp.StatusCode != http.StatusCreated {
tapi.t.Fatal("Can't create old order:", resp.Status)
}
var orders []db.Order
resp = tapi.do("GET", "/order/picks", nil, &orders)
if resp.StatusCode != http.StatusOK {
t.Fatal("Can't get orders picks:", resp.Status)
}
if len(orders) != 1 {
t.Fatal("Wrong number of orders", len(orders), orders)
}
if orders[0].Name != testOrder.Name {
t.Error("Wrong name:", orders[0].Name)
}
if orders[0].Deadline.Day() != testOrder.Deadline.Day() {
t.Fatal("Wrong deadline", orders[0].Deadline, "!=", testOrder.Deadline)
}
}
func (tapi *testAPI) addTestOrder() { func (tapi *testAPI) addTestOrder() {
resp := tapi.do("POST", "/order", testOrder, nil) resp := tapi.do("POST", "/order", testOrder, nil)
if resp.StatusCode != http.StatusCreated { if resp.StatusCode != http.StatusCreated {
tapi.t.Fatal("Can't create order:", resp.Status) tapi.t.Fatal("Can't create order:", resp.Status)
} }
} }
func (tapi *testAPI) deactivateOrders() []db.Order {
dbPath := path.Join(tapi.testPath, "test.db")
database, err := db.Init(dbPath)
if err != nil {
tapi.t.Fatal("Can't initialize the db:", err)
}
return database.DeactivateOrders()
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment