88 lines
2.6 KiB
Go
88 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/gin-contrib/cors"
|
|
"github.com/gin-gonic/gin"
|
|
|
|
"soda-api/backend/internal/database"
|
|
"soda-api/backend/internal/handlers"
|
|
"soda-api/backend/internal/middleware"
|
|
"soda-api/backend/internal/utils"
|
|
)
|
|
|
|
func main() {
|
|
database.InitDB()
|
|
db := database.GetDB()
|
|
|
|
jwtManager := utils.NewJWTManager("coffee-mall-secret", 4*time.Hour)
|
|
idleManager := middleware.NewIdleManager(time.Minute)
|
|
|
|
authHandler := handlers.NewAuthHandler(db, jwtManager)
|
|
productHandler := handlers.NewProductHandler(db)
|
|
orderHandler := handlers.NewOrderHandler(db)
|
|
memberHandler := handlers.NewMemberHandler(db)
|
|
pointsHandler := handlers.NewPointsHandler(db)
|
|
ticketHandler := handlers.NewTicketHandler(db)
|
|
mallHandler := handlers.NewMallHandler(db)
|
|
|
|
router := gin.Default()
|
|
router.Use(cors.New(cors.Config{
|
|
AllowOrigins: []string{"*"},
|
|
AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
|
|
AllowHeaders: []string{"Authorization", "Content-Type"},
|
|
}))
|
|
|
|
router.GET("/health", func(c *gin.Context) {
|
|
c.JSON(200, gin.H{"status": "ok"})
|
|
})
|
|
|
|
api := router.Group("/api")
|
|
{
|
|
api.GET("/home", mallHandler.Home)
|
|
api.GET("/products", productHandler.List)
|
|
api.GET("/products/:id", productHandler.Get)
|
|
|
|
api.POST("/orders", orderHandler.Create)
|
|
api.POST("/pay/demo", mallHandler.PayDemo)
|
|
|
|
api.POST("/auth/login", authHandler.Login)
|
|
api.POST("/auth/register", authHandler.Register)
|
|
}
|
|
|
|
protected := api.Group("/admin")
|
|
protected.Use(middleware.NewAuthMiddleware(jwtManager), idleManager.Middleware())
|
|
{
|
|
protected.GET("/products", productHandler.List)
|
|
protected.POST("/products", productHandler.Create)
|
|
protected.GET("/products/:id", productHandler.Get)
|
|
protected.PUT("/products/:id", productHandler.Update)
|
|
protected.DELETE("/products/:id", productHandler.Delete)
|
|
|
|
protected.GET("/orders", orderHandler.List)
|
|
protected.PUT("/orders/:id", orderHandler.Update)
|
|
protected.DELETE("/orders/:id", orderHandler.Delete)
|
|
|
|
protected.GET("/members", memberHandler.List)
|
|
protected.POST("/members", memberHandler.Create)
|
|
protected.PUT("/members/:id", memberHandler.Update)
|
|
protected.DELETE("/members/:id", memberHandler.Delete)
|
|
|
|
protected.GET("/points", pointsHandler.List)
|
|
protected.POST("/points", pointsHandler.Create)
|
|
protected.DELETE("/points/:id", pointsHandler.Delete)
|
|
|
|
protected.GET("/tickets", ticketHandler.List)
|
|
protected.POST("/tickets", ticketHandler.Create)
|
|
protected.PUT("/tickets/:id", ticketHandler.Update)
|
|
protected.DELETE("/tickets/:id", ticketHandler.Delete)
|
|
}
|
|
|
|
log.Println("Coffee mall backend running on :8080")
|
|
if err := router.Run(":8080"); err != nil {
|
|
log.Fatalf("server error: %v", err)
|
|
}
|
|
}
|