package api import ( "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 } db.AutoMigrate(&Member{}, &Product{}, &PurchasedProduct{}, &Purchase{}) return db, err } func Init(dbPath string, signKey string, r *mux.Router) error { db, err := initDB(dbPath) if err != nil { return err } a := api{db, []byte(signKey)} token, err := a.newToken(0, "admin") log.Print(token) r.HandleFunc("/signin", a.SignIn).Methods("POST") r.HandleFunc("/member", a.auth(a.ListMembers)).Methods("GET") r.HandleFunc("/member", a.auth(a.AddMember)).Methods("POST") r.HandleFunc("/member/{num:[0-9]+}", a.auth(a.GetMember)).Methods("GET") r.HandleFunc("/member/{num:[0-9]+}", a.auth(a.UpdateMember)).Methods("PUT") r.HandleFunc("/member/{num:[0-9]+}", a.auth(a.DeleteMember)).Methods("DELETE") r.HandleFunc("/member/{num:[0-9]+}/purchase", a.auth(a.GetMemberPurchases)).Methods("GET") r.HandleFunc("/product", a.auth(a.ListProducts)).Methods("GET") r.HandleFunc("/product", a.auth(a.AddProduct)).Methods("POST") r.HandleFunc("/product/{code:[0-9]+}", a.auth(a.GetProduct)).Methods("GET") r.HandleFunc("/product/{code:[0-9]+}", a.auth(a.UpdateProduct)).Methods("PUT") r.HandleFunc("/product/{code:[0-9]+}", a.auth(a.DeleteProduct)).Methods("DELETE") r.HandleFunc("/purchase", a.auth(a.ListPurchases)).Methods("GET") r.HandleFunc("/purchase", a.authNum(a.AddPurchase)).Methods("POST") r.HandleFunc("/purchase/{id:[0-9]+}", a.auth(a.GetPurchase)).Methods("GET") r.HandleFunc("/purchase/mine", a.authNum(a.getPurchasesByMember)).Methods("GET") return nil }