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

Check that you have enough money

parent b6aa5a03
Branches
Tags
No related merge requests found
......@@ -12,7 +12,7 @@ import (
)
type Purchase struct {
gorm.Model `json:"-"`
gorm.Model
MemberNum int `json:"member" gorm:"column:member"`
Member Member `json:"-" gorm:"foreignKey:MemberNum;references:Num"`
Date time.Time `json:"date"`
......@@ -56,9 +56,6 @@ 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
if err != nil {
......@@ -71,6 +68,18 @@ func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) {
products[i].Price = product.Price
}
var member Member
err = a.db.Where("num = ?", num).Find(&member).Error
if err != nil {
log.Printf("Can't find member %d: %v", num, err)
w.WriteHeader(http.StatusBadRequest)
return
}
if member.Balance < total {
log.Printf("Member %d don't have enough money (%d-%d): %v", num, member.Balance, total, err)
w.WriteHeader(http.StatusBadRequest)
return
}
err = a.db.Model(&Member{}).
Where("num = ?", num).
Update("balance", gorm.Expr("balance - ?", total)).Error
......@@ -79,6 +88,7 @@ func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) {
w.WriteHeader(http.StatusBadRequest)
return
}
purchase := Purchase{
MemberNum: num,
Date: time.Now(),
......@@ -114,7 +124,9 @@ func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) {
func (a *api) GetPurchase(w http.ResponseWriter, req *http.Request) {
vars := mux.Vars(req)
var purchase Purchase
err := a.db.Where("id = ?", vars["id"]).First(&purchase).Error
err := a.db.Where("id = ?", vars["id"]).
Preload("Products.Product").
First(&purchase).Error
if err != nil {
if err.Error() == "record not found" {
w.WriteHeader(http.StatusNotFound)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment