Skip to content
Snippets Groups Projects
api.go 1.93 KiB
Newer Older
  • Learn to ignore specific revisions
  • package api
    
    import (
    
    meskio's avatar
    meskio committed
    	"log"
    
    
    	"github.com/gorilla/mux"
    	"gorm.io/driver/sqlite"
    	"gorm.io/gorm"
    )
    
    type api struct {
    
    	db      *gorm.DB
    	signKey []byte
    
    }
    
    func initDB(dbPath string) (*gorm.DB, error) {
    	db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
    	if err != nil {
    		return nil, err
    	}
    
    
    meskio's avatar
    meskio committed
    	db.AutoMigrate(&Member{}, &Product{}, &Purchase{}, &Transaction{})
    
    func Init(dbPath string, signKey string, r *mux.Router) error {
    
    	db, err := initDB(dbPath)
    	if err != nil {
    		return err
    	}
    
    
    	a := api{db, []byte(signKey)}
    
    meskio's avatar
    meskio committed
    
    	token, err := a.newToken(0, "admin")
    	log.Print(token)
    
    
    	r.HandleFunc("/signin", a.SignIn).Methods("POST")
    
    meskio's avatar
    meskio committed
    	r.HandleFunc("/token", a.GetToken).Methods("GET")
    
    meskio's avatar
    meskio committed
    
    
    meskio's avatar
    meskio committed
    	r.HandleFunc("/member", a.authAdmin(a.ListMembers)).Methods("GET")
    	r.HandleFunc("/member", a.authAdmin(a.AddMember)).Methods("POST")
    	r.HandleFunc("/member/me", a.authNum(a.getMemberNum)).Methods("GET")
    	r.HandleFunc("/member/{num:[0-9]+}", a.authAdmin(a.GetMember)).Methods("GET")
    	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]+}/purchase", a.authAdmin(a.GetMemberTransactions)).Methods("GET")
    
    meskio's avatar
    meskio committed
    
    	r.HandleFunc("/product", a.auth(a.ListProducts)).Methods("GET")
    
    meskio's avatar
    meskio committed
    	r.HandleFunc("/product", a.authAdmin(a.AddProduct)).Methods("POST")
    
    meskio's avatar
    meskio committed
    	r.HandleFunc("/product/{code:[0-9]+}", a.auth(a.GetProduct)).Methods("GET")
    
    meskio's avatar
    meskio committed
    	r.HandleFunc("/product/{code:[0-9]+}", a.authAdmin(a.UpdateProduct)).Methods("PUT")
    	r.HandleFunc("/product/{code:[0-9]+}", a.authAdmin(a.DeleteProduct)).Methods("DELETE")
    
    meskio's avatar
    meskio committed
    
    
    meskio's avatar
    meskio committed
    	r.HandleFunc("/transaction", a.auth(a.ListTransactions)).Methods("GET")
    
    meskio's avatar
    meskio committed
    	r.HandleFunc("/transaction/{id:[0-9]+}", a.authNumRole(a.GetTransaction)).Methods("GET")
    
    meskio's avatar
    meskio committed
    	r.HandleFunc("/transaction/mine", a.authNum(a.getTransactionsByMember)).Methods("GET")
    
    
    meskio's avatar
    meskio committed
    	r.HandleFunc("/purchase", a.authNum(a.AddPurchase)).Methods("POST")