package cmd import ( "context" _ "github.com/gogf/gf/contrib/drivers/mysql/v2" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/os/gcmd" "github.com/gogf/gf/v2/os/gcron" "tool-api/internal/controller" "tool-api/internal/logic" ) var ( Main = gcmd.Command{ Name: "main", Usage: "main", Brief: "start http server", Func: func(ctx context.Context, parser *gcmd.Parser) (err error) { // 启动时幂等迁移(建表 / 加列),数据库不可用时仅告警 logic.Migrate(ctx) // 启动时幂等写入种子数据(管理员/模块/等级/工具/会员套餐/次数包/额度设置),数据库不可用时仅告警 logic.Seed(ctx) // 会员订单兜底扫单:推送丢失时主动查单补发货(建议间隔 5 分钟) if _, err = gcron.AddSingleton(ctx, "0 */5 * * * *", func(c context.Context) { logic.SweepPendingOrders(c) }, "member-order-sweep"); err != nil { g.Log().Warningf(ctx, "[cron] 会员订单扫单任务注册失败: %v", err) } s := g.Server() // 公开接口:小程序登录、开发登录、管理端登录、虚拟支付发货推送回调 s.Group("/", func(group *ghttp.RouterGroup) { group.Middleware(logic.CORS, logic.Response) group.Bind(controller.UserPub, controller.AdminPub) // 平台回调无 token,单独注册(响应体为 XML,不走统一 JSON 包装) group.POST("/pay/notify", controller.PayNotify) }) // 小程序用户接口 s.Group("/", func(group *ghttp.RouterGroup) { group.Middleware(logic.CORS, logic.Response, logic.UserAuth) group.Bind(controller.UserAuth, controller.Member, controller.Quota) }) // 管理端接口 s.Group("/", func(group *ghttp.RouterGroup) { group.Middleware(logic.CORS, logic.Response, logic.AdminAuth) group.Bind(controller.AdminAuth) }) s.Run() return nil }, } )