Files
epic-go/internal/cmd/cmd.go
hu xiaotong 1dd95f787a refactor(internal): 优化 OSS 预签名 URL 缓存刷新任务和英雄数据缓存逻辑
- 注释掉 OSS预签名 URL 缓存刷新任务的定时执行代码
- 在 hero/hero.go 中增加对 Redis缓存和英雄数据集的非空校验
- 修改 OSS预签名 URL 生成逻辑,自动替换为 CDN 域名
2025-10-27 17:16:35 +08:00

86 lines
1.8 KiB
Go

package cmd
import (
"context"
"epic/internal/controller/cron"
"epic/internal/controller/hero"
"epic/internal/logic/i18n"
"epic/internal/service"
"epic/internal/util"
"os"
"os/signal"
"syscall"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/os/gcmd"
)
func CORS(r *ghttp.Request) {
r.Response.CORSDefault()
r.Middleware.Next()
}
var (
Main = gcmd.Command{
Name: "main",
Usage: "main",
Brief: "start http server",
Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
// 初始化i18n服务
InitI18nService(ctx)
// 启动定时任务
if err := service.Cron().StartAllJobs(ctx); err != nil {
util.Error(ctx, "Failed to start cron jobs:", err)
return err
}
// 设置优雅关闭
setupGracefulShutdown(ctx)
s := g.Server()
s.Use(CORS)
s.Group("/", func(group *ghttp.RouterGroup) {
group.Middleware(ghttp.MiddlewareHandlerResponse)
group.Bind(
hero.NewV1(),
cron.NewV1(),
)
})
s.Run()
return nil
},
}
)
// setupGracefulShutdown 设置优雅关闭
func setupGracefulShutdown(ctx context.Context) {
// 创建信号通道
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
// 在后台监听信号
go func() {
sig := <-sigChan
g.Log().Infof(ctx, "Received signal: %v, shutting down gracefully...", sig)
// 停止定时任务
if err := service.Cron().StopAllJobs(ctx); err != nil {
util.Error(ctx, "Failed to stop cron jobs:", err)
}
// 退出程序
os.Exit(0)
}()
}
// InitI18nService 初始化i18n服务
func InitI18nService(ctx context.Context) {
// 启动i18n自动刷新
i18nLogic := i18n.New()
i18nLogic.StartAutoRefresh(ctx)
util.Info(ctx, "i18n服务初始化完成")
}