Files
ais/pkg/api/api.go
2022-12-13 08:07:11 +08:00

96 lines
1.9 KiB
Go

package api
import (
"database/sql"
"log"
"os"
"github.com/gin-contrib/sessions"
"github.com/gin-contrib/sessions/cookie"
"github.com/gin-gonic/gin"
_ "github.com/lib/pq"
)
var db *sql.DB
func init() {
var err error
db, err = sql.Open("postgres", os.Getenv("POSTGRES"))
if err != nil {
log.Fatal(err)
}
log.Println("Successfully connected to postgres database")
// install tables
if len(os.Args) >= 2 {
if os.Args[1] == "install" {
install()
os.Exit(0)
}
// drop tables
if os.Args[1] == "drop" {
drop()
os.Exit(0)
}
// reinstall
if os.Args[1] == "reinstall" {
drop()
install()
os.Exit(0)
}
// fake data
if os.Args[1] == "fake" {
fakeData()
os.Exit(0)
}
// unknown Args
log.Println("Unknown args", os.Args)
os.Exit(2)
}
}
func NewAPI() *gin.Engine {
router := gin.Default()
// session
store := cookie.NewStore([]byte("Miku saves the world!"))
router.Use(sessions.Sessions("ais", store))
group := router.Group("/api")
// json error middleware
group.Use(func(c *gin.Context) {
c.Next()
if len(c.Errors) > 0 {
c.JSON(-1, gin.H{
"errors": c.Errors.Errors(),
"note": "gin api error handler",
})
}
})
group.POST("/login", handelLogin)
group.GET("/login", handelGetLoginSession)
group.POST("/register", handelRegister)
group.POST("/logout", handelLogout)
customer := group.Group("/customer")
customer.GET("/market", handleGetMarket)
customer.GET("/market/distance", handleGetMarketByDistance)
customer.GET("/market/:marketid", handleGetGoods)
customer.POST("/market/:marketid/:goodsid", handleBuy)
customer.GET("/purchase", handleGetPurchaseHistory)
customer.DELETE("/purchase/:purchaseid", handleDeletePurchaseHistory)
customer.GET("/purchase/report", handleCustomerReport)
supplier := group.Group("/supplier")
supplier.GET("/goods", handleGetGodsBySupplier)
supplier.POST("/goods", handleCreateGoods)
return router
}