diff --git a/api/api.go b/api/api.go index d6ef8079d9129c6110444e87ec8ddf555e4b1ece..44bd57fe9698091bf44d27749aa94be06789a239 100644 --- a/api/api.go +++ b/api/api.go @@ -40,7 +40,7 @@ func Init(dbPath string, signKey string, mail *Mail, r *mux.Router) error { r.HandleFunc("/member/{num:[0-9]+}", a.authAdmin(a.UpdateMember)).Methods("PUT") r.HandleFunc("/member/{num:[0-9]+}", a.authAdmin(a.DeleteMember)).Methods("DELETE") r.HandleFunc("/member/{num:[0-9]+}/transactions", a.authAdmin(a.GetMemberTransactions)).Methods("GET") - r.HandleFunc("/member/{num:[0-9]+}/purchase", a.authAdmin(a.AddMemberPurchase)).Methods("POST") + r.HandleFunc("/member/{num:[0-9]+}/purchase", a.authAdminNum(a.AddMemberPurchase)).Methods("POST") r.HandleFunc("/product", a.auth(a.ListProducts)).Methods("GET") r.HandleFunc("/product", a.authAdmin(a.AddProduct)).Methods("POST") diff --git a/api/db/transaction.go b/api/db/transaction.go index 151c3df37c175178cfa9ec2381f70cf97b62f673..8b1b83c41911c7f4604ad2fa051f77a3a4abd6ac 100644 --- a/api/db/transaction.go +++ b/api/db/transaction.go @@ -17,6 +17,8 @@ type Transaction struct { Date time.Time `json:"date"` Total int `json:"total"` Type string `json:"type"` + ProxyNum int `json:"-" gorm:"column:proxy"` + Proxy *Member `json:"proxy,omitempty" gorm:"foreignKey:ProxyNum;references:Num"` Purchase []Purchase `json:"purchase,omitempty"` Topup *Topup `json:"topup,omitempty"` @@ -29,8 +31,6 @@ type Transaction struct { type Topup struct { gorm.Model `json:"-"` TransactionID uint `json:"-" gorm:"column:transaction"` - MemberNum int `json:"member" gorm:"column:member"` - Member Member `json:"-" gorm:"foreignKey:MemberNum;references:Num"` Comment string `json:"comment"` } @@ -70,19 +70,20 @@ func (d *DB) GetTransaction(id int) (transaction Transaction, err error) { func (d *DB) AddTopup(adminNum int, memberNum int, amount int, comment string) (transaction Transaction, err error) { transaction = Transaction{ MemberNum: memberNum, + ProxyNum: adminNum, Date: time.Now(), Topup: &Topup{ - MemberNum: adminNum, - Comment: comment, + Comment: comment, }, Type: "topup", Total: amount, } + log.Println(transaction.ProxyNum) err = createTransaction(d.db, &transaction) return } -func (d *DB) AddPurchase(memberNum int, purchase []Purchase) (transaction Transaction, err error) { +func (d *DB) AddPurchase(adminNum int, memberNum int, purchase []Purchase) (transaction Transaction, err error) { total := 0 for i, p := range purchase { var product Product @@ -104,6 +105,7 @@ func (d *DB) AddPurchase(memberNum int, purchase []Purchase) (transaction Transa transaction = Transaction{ MemberNum: memberNum, + ProxyNum: adminNum, Date: time.Now(), Purchase: purchase, Type: "purchase", diff --git a/api/purchase.go b/api/purchase.go index 932bcabd9916afbb51c26a07dc70b4eb8d72251a..3a267d1f670cc8e9c2562cc875bc951d51e9dd70 100644 --- a/api/purchase.go +++ b/api/purchase.go @@ -12,6 +12,16 @@ import ( ) func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) { + a.addPurchase(0, num, w, req) +} + +func (a *api) AddMemberPurchase(adminNum int, w http.ResponseWriter, req *http.Request) { + vars := mux.Vars(req) + num, _ := strconv.Atoi(vars["num"]) + a.addPurchase(adminNum, num, w, req) +} + +func (a *api) addPurchase(adminNum int, memberNum int, w http.ResponseWriter, req *http.Request) { var purchase []db.Purchase err := json.NewDecoder(req.Body).Decode(&purchase) if err != nil { @@ -20,7 +30,7 @@ func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) { return } - transaction, err := a.db.AddPurchase(num, purchase) + transaction, err := a.db.AddPurchase(adminNum, memberNum, purchase) if err != nil { if errors.Is(err, db.ErrorNotFound) { w.WriteHeader(http.StatusNotAcceptable) @@ -40,11 +50,4 @@ func (a *api) AddPurchase(num int, w http.ResponseWriter, req *http.Request) { log.Printf("Can't encode added purchase: %v", err) w.WriteHeader(http.StatusInternalServerError) } - -} - -func (a *api) AddMemberPurchase(w http.ResponseWriter, req *http.Request) { - vars := mux.Vars(req) - num, _ := strconv.Atoi(vars["num"]) - a.AddPurchase(num, w, req) } diff --git a/api/purchase_test.go b/api/purchase_test.go index 322b4ce904090fde3e7a2ff5d28abdd23a5f069a..d2516f053b7a06a8c6f65a9b213eaef619b68662 100644 --- a/api/purchase_test.go +++ b/api/purchase_test.go @@ -90,6 +90,9 @@ func TestMemberPurchase(t *testing.T) { if len(transactions) != 1 { t.Fatal("Wrong number of transactions", len(transactions), transactions) } + if transactions[0].Proxy.Num != testMemberAdmin.Num { + t.Error("Wrong proxy:", transactions[0].Proxy.Num) + } if transactions[0].Total != -testProduct.Price*products[0].Amount { t.Error("Wrong total:", transactions[0].Total) } diff --git a/api/topup_test.go b/api/topup_test.go index 3d2eb2ba51afbfe9a4624ea0b8af237a16598833..cf55e36db5b1ad6021928614f99de60ff1a19b59 100644 --- a/api/topup_test.go +++ b/api/topup_test.go @@ -34,8 +34,8 @@ func TestTopupAddListMine(t *testing.T) { if transactions[0].Total != 20 { t.Error("Wrong total:", transactions[0].Total) } - if transactions[0].Topup.MemberNum != testMemberAdmin.Num { - t.Error("Wrong topup member:", transactions[0].Topup.MemberNum) + if transactions[0].Proxy.Num != testMemberAdmin.Num { + t.Error("Wrong proxy:", transactions[0].Proxy.Num) } if transactions[0].Topup.Comment != "my topup" { t.Error("Wrong topup comment:", transactions[0].Topup.Comment) diff --git a/src/ShowTransaction.js b/src/ShowTransaction.js index 8b16b840865c6c14ff023bc9a71ee9515714f710..6da5dee419c4fb813fd6bf90966c60c4924f9b4c 100644 --- a/src/ShowTransaction.js +++ b/src/ShowTransaction.js @@ -34,7 +34,15 @@ function ShowTransaction() { <h3>Total: {printMoney(transaction.total)}€</h3> </Col> <Col> - <p className="text-right">{printDate(transaction.date)}</p> + <p className="text-right"> + {printDate(transaction.date)} + {transaction.proxy && ( + <span> + <br /> + por: {transaction.proxy.name} + </span> + )} + </p> </Col> </Row> </Container>