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) } }