package main import ( "log" "os" "path/filepath" "affiliate_dash/internal/config" "affiliate_dash/internal/handler" "affiliate_dash/internal/model" "affiliate_dash/internal/pkg/jwt" "affiliate_dash/internal/router" "affiliate_dash/internal/service" "github.com/gin-gonic/gin" "gorm.io/driver/sqlite" "gorm.io/gorm" "gorm.io/gorm/logger" ) func main() { cfg := config.Load() gin.SetMode(cfg.Mode) if err := os.MkdirAll(filepath.Dir(cfg.DBPath), 0o755); err != nil { log.Fatalf("create data dir: %v", err) } db, err := gorm.Open(sqlite.Open(cfg.DBPath), &gorm.Config{ Logger: logger.Default.LogMode(logger.Info), }) if err != nil { log.Fatalf("open db: %v", err) } if err := db.AutoMigrate(&model.User{}, &model.Skin{}, &model.Order{}); 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.SeedDemo(); err != nil { log.Printf("seed skins: %v", err) } h := &router.Handlers{ Auth: handler.NewAuthHandler(authSvc), Skin: handler.NewSkinHandler(skinSvc), Order: handler.NewOrderHandler(orderSvc), User: handler.NewUserHandler(userSvc), JWT: jm, } r := router.Setup(h) addr := ":" + cfg.Port log.Printf("游戏皮肤分销系统 API 启动: http://localhost%s", addr) log.Printf("默认管理员: admin / admin123") if err := r.Run(addr); err != nil { log.Fatalf("server: %v", err) } }