2025-12-07 20:51:20 +08:00
|
|
|
|
// @title CarrotSkin API
|
|
|
|
|
|
// @version 1.0
|
|
|
|
|
|
// @description Minecraft皮肤站后端API
|
|
|
|
|
|
// @host localhost:8080
|
|
|
|
|
|
// @BasePath /api/v1
|
|
|
|
|
|
// @securityDefinitions.apikey BearerAuth
|
|
|
|
|
|
// @in header
|
|
|
|
|
|
// @name Authorization
|
|
|
|
|
|
|
2025-11-30 18:56:56 +08:00
|
|
|
|
package main
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
|
"log"
|
|
|
|
|
|
|
2026-06-15 16:39:45 +08:00
|
|
|
|
"carrotskin/internal/app"
|
2025-11-30 18:56:56 +08:00
|
|
|
|
"carrotskin/pkg/config"
|
|
|
|
|
|
|
2026-06-15 16:39:45 +08:00
|
|
|
|
"go.uber.org/fx"
|
2025-11-30 18:56:56 +08:00
|
|
|
|
)
|
|
|
|
|
|
|
2026-06-15 16:39:45 +08:00
|
|
|
|
// main 应用入口。通过 uber-go/fx 装配所有依赖并管理生命周期。
|
|
|
|
|
|
//
|
|
|
|
|
|
// fx.Run() 会:
|
|
|
|
|
|
// 1. 按 fx.Supply/Provide 构建依赖图
|
|
|
|
|
|
// 2. 执行所有 fx.Invoke(迁移、路由注册、服务器/任务启动)
|
|
|
|
|
|
// 3. 监听 SIGINT/SIGTERM 信号
|
|
|
|
|
|
// 4. 按依赖逆序执行所有 OnStop 钩子(优雅关闭)
|
2025-11-30 18:56:56 +08:00
|
|
|
|
func main() {
|
2026-06-15 16:39:45 +08:00
|
|
|
|
// 加载配置(唯一的全局入口,配置本身是无状态的纯数据)
|
|
|
|
|
|
cfg, err := config.Load()
|
2025-12-08 19:12:30 +08:00
|
|
|
|
if err != nil {
|
2026-06-15 16:39:45 +08:00
|
|
|
|
log.Fatalf("配置加载失败: %v", err)
|
2025-11-30 18:56:56 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
2026-06-15 16:39:45 +08:00
|
|
|
|
// 创建并运行 fx 应用
|
|
|
|
|
|
fx.New(app.Module(cfg)).Run()
|
2025-11-30 18:56:56 +08:00
|
|
|
|
}
|