- 实现数据库连接和自动迁移 - 实现用户服务(登录、资料、JWT认证) - 实现许愿服务(创建、列表、机器人许愿) - 实现订单服务(创建、支付、状态管理) - 实现JWT认证中间件 - 实现管理后台API(仪表盘、用户、订单、许愿、设置) - 创建Inertia.js前端页面(Vue3 + Tailwind CSS) - 修复Go模块依赖问题
101 lines
2.5 KiB
Go
101 lines
2.5 KiB
Go
package main
|
||
|
||
import (
|
||
"log"
|
||
|
||
"github.com/gin-gonic/gin"
|
||
"github.com/gouki/lunar-server/internal/config"
|
||
"github.com/gouki/lunar-server/internal/handler"
|
||
"github.com/gouki/lunar-server/internal/middleware"
|
||
"github.com/gouki/lunar-server/internal/service"
|
||
)
|
||
|
||
func main() {
|
||
// 加载配置
|
||
cfg := config.Load()
|
||
|
||
// 初始化数据库
|
||
if err := config.InitDB(cfg); err != nil {
|
||
log.Fatalf("Failed to initialize database: %v", err)
|
||
}
|
||
|
||
// 启动机器人许愿定时任务
|
||
wishService := service.NewWishService()
|
||
wishService.StartRobotWishJob()
|
||
|
||
// 设置运行模式
|
||
if cfg.Server.Env == "production" {
|
||
gin.SetMode(gin.ReleaseMode)
|
||
}
|
||
|
||
// 创建路由
|
||
r := gin.Default()
|
||
|
||
// 中间件
|
||
r.Use(middleware.CORS())
|
||
r.Use(middleware.Logger())
|
||
|
||
// 静态文件
|
||
r.Static("/static", "./web/static")
|
||
r.StaticFile("/", "./web/index.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", handler.GetPayStatus)
|
||
}
|
||
|
||
// 订单相关
|
||
order := api.Group("/order")
|
||
{
|
||
order.GET("/list", middleware.Auth(), handler.GetOrderList)
|
||
order.GET("/: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.GET("/:id", handler.GetWishDetail)
|
||
wish.DELETE("/:id", middleware.Auth(), handler.DeleteWish)
|
||
wish.GET("/products", handler.GetWishProducts)
|
||
}
|
||
}
|
||
|
||
// 管理后台路由(Inertia.js)
|
||
admin := r.Group("/admin")
|
||
admin.Use(middleware.AdminAuth())
|
||
{
|
||
admin.GET("/", handler.AdminDashboard)
|
||
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.Fatalf("Failed to start server: %v", err)
|
||
}
|
||
}
|