package main import ( "log" "os" "github.com/gin-gonic/gin" "github.com/joho/godotenv" "github.com/gouki/lunar-server/internal/config" "github.com/gouki/lunar-server/internal/handler" "github.com/gouki/lunar-server/internal/middleware" ) func main() { // 加载环境变量 if err := godotenv.Load("../.env.local"); err != nil { log.Println("No .env.local file found, using system environment") } // 初始化配置 cfg := config.Load() // 设置 Gin 模式 if cfg.Server.Env == "production" { gin.SetMode(gin.ReleaseMode) } // 创建路由 r := gin.Default() // 中间件 r.Use(middleware.CORS()) r.Use(middleware.Logger()) // 静态文件(Inertia.js 前端构建产物) r.Static("/build", "./web/public/build") r.LoadHTMLGlob("web/*.html") // API 路由 api := r.Group("/api") { // 用户相关 user := api.Group("/user") { user.POST("/login", handler.UserLogin) user.POST("/logout", handler.UserLogout) user.GET("/profile", middleware.Auth(), handler.GetUserProfile) user.PUT("/profile", middleware.Auth(), handler.UpdateUserProfile) user.POST("/auth", handler.WechatAuth) } // 支付相关 pay := api.Group("/pay") { pay.POST("/create", middleware.Auth(), handler.CreateOrder) pay.POST("/notify", handler.PayNotify) pay.GET("/status/:orderId", middleware.Auth(), handler.GetPayStatus) } // 订单管理 order := api.Group("/order") { order.GET("/list", middleware.Auth(), handler.GetOrderList) order.GET("/detail/:id", middleware.Auth(), handler.GetOrderDetail) order.POST("/cancel/:id", middleware.Auth(), handler.CancelOrder) } // 许愿树 wish := api.Group("/wish") { wish.GET("/tree", handler.GetWishTree) wish.POST("/create", middleware.Auth(), handler.CreateWish) wish.GET("/list", handler.GetWishList) wish.DELETE("/:id", middleware.Auth(), handler.DeleteWish) } } // 管理后台(Inertia.js) admin := r.Group("/admin") { admin.GET("/", handler.AdminIndex) admin.GET("/users", handler.AdminUsers) admin.GET("/orders", handler.AdminOrders) admin.GET("/wishes", handler.AdminWishes) admin.GET("/settings", handler.AdminSettings) } // 启动服务器 addr := ":" + cfg.Server.Port log.Printf("Server starting on %s", addr) if err := r.Run(addr); err != nil { log.Fatal("Failed to start server:", err) } }