Skip to content
Snippets Groups Projects
topup.go 1.48 KiB
Newer Older
  • Learn to ignore specific revisions
  • meskio's avatar
    meskio committed
    package api
    
    import (
    	"encoding/json"
    	"log"
    	"net/http"
    	"time"
    
    	"gorm.io/gorm"
    )
    
    type Topup struct {
    	gorm.Model    `json:"-"`
    	TransactionID int    `json:"-" gorm:"column:transaction"`
    	MemberNum     int    `json:"member" gorm:"column:member"`
    	Member        Member `json:"-" gorm:"foreignKey:MemberNum;references:Num"`
    	Comment       string `json:"comment"`
    }
    
    func (a *api) AddTopup(adminNum int, w http.ResponseWriter, req *http.Request) {
    	var topup struct {
    		Member  int    `json:"member"`
    		Comment string `json:"comment"`
    		Ammount int    `json:"ammount"`
    	}
    	err := json.NewDecoder(req.Body).Decode(&topup)
    	if err != nil {
    		log.Printf("Can't parse topup: %v", err)
    		w.WriteHeader(http.StatusInternalServerError)
    		return
    	}
    
    	httpStatus := a.updateMemberBalance(topup.Member, topup.Ammount)
    	if httpStatus != http.StatusOK {
    		w.WriteHeader(httpStatus)
    		return
    	}
    
    	transaction := Transaction{
    		MemberNum: topup.Member,
    		Date:      time.Now(),
    		Topup: Topup{
    			MemberNum: adminNum,
    			Comment:   topup.Comment,
    		},
    		Type:  "toupup",
    		Total: topup.Ammount,
    	}
    	err = a.db.Create(&transaction).Error
    	if err != nil {
    		log.Printf("Can't create topup: %v\n%v", err, transaction)
    		w.WriteHeader(http.StatusInternalServerError)
    		return
    	}
    
    	w.Header().Set("Content-Type", "application/json")
    	w.WriteHeader(http.StatusCreated)
    	err = json.NewEncoder(w).Encode(transaction)
    	if err != nil {
    		log.Printf("Can't encode added topup: %v", err)
    		w.WriteHeader(http.StatusInternalServerError)
    	}
    
    }