package main import ( "log" "github.com/gin-gonic/gin" "wx_service/config" "wx_service/internal/database" "wx_service/internal/handler" "wx_service/internal/model" rmhandler "wx_service/internal/remove_watermark/handler" rmmodel "wx_service/internal/remove_watermark/model" rmservice "wx_service/internal/remove_watermark/service" "wx_service/internal/routes" "wx_service/internal/service" smokehandler "wx_service/internal/smoke/handler" smokemodel "wx_service/internal/smoke/model" smokeservice "wx_service/internal/smoke/service" ) func main() { // 1) 加载配置(通常来自环境变量 / .env) config.LoadConfig() // 2) 初始化数据库连接 if err := database.InitDB(); err != nil { log.Fatalf("init database failed: %v", err) } // 3) 自动建表/迁移(开发阶段很方便;生产环境可改为手动迁移) if err := database.AutoMigrate( &model.MiniProgram{}, &model.User{}, &rmmodel.VideoParseLog{}, &rmmodel.VideoParseUnlock{}, &smokemodel.SmokeLog{}, ); err != nil { log.Fatalf("auto migrate failed: %v", err) } // 4) 初始化 HTTP 框架(Gin) gin.SetMode(config.AppConfig.Server.Mode) router := gin.Default() // 5) 依赖注入:先创建 service,再创建 handler(handler 只关心 HTTP 输入/输出) miniProgramService := service.NewMiniProgramService(database.DB) authService := service.NewAuthService(database.DB, miniProgramService) authHandler := handler.NewAuthHandler(authService) videoService, err := rmservice.NewVideoService(database.DB, config.AppConfig.ShortVideo) if err != nil { log.Fatalf("init video service failed: %v", err) } videoHandler := rmhandler.NewVideoHandler(videoService) smokeLogService := smokeservice.NewSmokeLogService(database.DB) smokeHandler := smokehandler.NewSmokeHandler(smokeLogService) // 6) 注册路由:把 URL 映射到 handler routes.Register(router, database.DB, authHandler, videoHandler, smokeHandler) // 7) 启动监听端口 addr := ":" + config.AppConfig.Server.Port if err := router.Run(addr); err != nil { log.Fatalf("server stopped: %v", err) } }