package main import ( "log" "affiliate_dash/internal/config" "affiliate_dash/internal/handler" "affiliate_dash/internal/model" "affiliate_dash/internal/pkg/applog" "affiliate_dash/internal/pkg/jwt" "affiliate_dash/internal/pkg/openlog" "affiliate_dash/internal/router" "affiliate_dash/internal/service" "github.com/gin-gonic/gin" "gorm.io/driver/postgres" "gorm.io/gorm" ) func main() { cfg := config.Load() // 日志:控制台 + 文件 logFile, err := applog.Setup(cfg.LogFile) if err != nil { log.Fatalf("setup log: %v", err) } if logFile != nil { defer logFile.Close() } gin.SetMode(cfg.Mode) db, err := gorm.Open(postgres.Open(cfg.DatabaseURL), &gorm.Config{ Logger: applog.NewGormLogger(cfg.Mode), }) if err != nil { log.Fatalf("open db: %v", err) } if err := db.AutoMigrate(&model.User{}, &model.Skin{}, &model.Order{}, &model.ShipLog{}); err != nil { log.Fatalf("migrate: %v", err) } jm := jwt.NewManager(cfg.JWTSecret) authSvc := service.NewAuthService(db, jm) skinSvc := service.NewSkinService(db) orderSvc := service.NewOrderService(db) userSvc := service.NewUserService(db) if err := authSvc.EnsureAdmin(); err != nil { log.Fatalf("ensure admin: %v", err) } if err := skinSvc.SeedCatalog(); err != nil { log.Printf("seed skins: %v", err) } openlog.Init(cfg.OpenAPIDebug) h := &router.Handlers{ Auth: handler.NewAuthHandler(authSvc), Skin: handler.NewSkinHandler(skinSvc), Order: handler.NewOrderHandler(orderSvc), User: handler.NewUserHandler(userSvc), Open: handler.NewOpenHandler(orderSvc), JWT: jm, OpenAPIKey: cfg.OpenAPIKey, OpenAPISecret: cfg.OpenAPISecret, OpenSignSkew: cfg.OpenSignSkew, OpenAPIDebug: cfg.OpenAPIDebug, } r := router.Setup(h) addr := ":" + cfg.Port log.Printf("游戏皮肤分销系统 API 启动: http://localhost%s", addr) log.Printf("数据库: PostgreSQL") log.Printf("默认管理员: admin / admin123") log.Printf("开放接口鉴权: X-Api-Key + X-Timestamp + X-Nonce + X-Sign (HMAC-SHA256)") if cfg.OpenAPIDebug { log.Printf("开放接口调试日志: 开启 (OPEN_API_DEBUG=0 可关闭)") } if cfg.LogFile != "" { log.Printf("日志文件: %s (同时输出控制台)", cfg.LogFile) } if err := r.Run(addr); err != nil { log.Fatalf("server: %v", err) } }