57 lines
1.9 KiB
Go
57 lines
1.9 KiB
Go
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
|
||
},
|
||
}
|
||
)
|