diff --git a/api/purchase.go b/api/purchase.go index 5b982bb1dfed4750474c48bf2e7f300358a03ea3..79c7021237595562398768eb7f2586c55fd2c9c2 100644 --- a/api/purchase.go +++ b/api/purchase.go @@ -56,11 +56,14 @@ func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) { } total := 0 for i, p := range products { + if p.ProductCode == 0 { + continue + } var product Product - err := a.db.Where("code = ?", p.ProductCode).First(&product).Error + err = a.db.Where("code = ?", p.ProductCode).First(&product).Error if err != nil { log.Printf("Can't get product %d: %v", p.ProductCode, err) - w.WriteHeader(http.StatusInternalServerError) + w.WriteHeader(http.StatusBadRequest) return } @@ -68,6 +71,14 @@ func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) { products[i].Price = product.Price } + err = a.db.Model(&Member{}). + Where("num = ?", num). + Update("balance", gorm.Expr("balance - ?", total)).Error + if err != nil { + log.Printf("Can't update update member balance %d-%d: %v", num, total, err) + w.WriteHeader(http.StatusBadRequest) + return + } purchase := Purchase{ MemberNum: num, Date: time.Now(), @@ -86,7 +97,7 @@ func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) { Where("code = ?", p.ProductCode). Update("stock", gorm.Expr("stock - ?", p.Ammount)).Error if err != nil { - log.Printf("Can't update product stock %d: %v", p.ProductCode, err) + log.Printf("Can't update product stock %d-%d: %v", p.ProductCode, p.Ammount, err) } } diff --git a/api/purchase_test.go b/api/purchase_test.go index 622a0d0eb7e1e6c4edb8e7a6c3726839fd0850b3..3bf4931c9627e382dd56134d94e15d07590414f5 100644 --- a/api/purchase_test.go +++ b/api/purchase_test.go @@ -51,4 +51,13 @@ func TestPurchaseAddListMine(t *testing.T) { if product.Stock != testProduct.Stock-products[0].Ammount { t.Error("Wrong product stock:", product) } + + var member Member + resp = tapi.do("GET", "/member/10", nil, &member) + if resp.StatusCode != http.StatusOK { + t.Error("Can't find the member:", resp.Status) + } + if member.Balance != testMember.Balance-(testProduct.Price*products[0].Ammount) { + t.Error("Wrong product balance:", member.Balance) + } }