package main import ( "log" "github.com/gin-gonic/gin" "wx_service/config" "wx_service/internal/database" "wx_service/internal/handler" "wx_service/internal/model" "wx_service/internal/routes" "wx_service/internal/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{}, &model.VideoParseLog{}, &model.VideoParseUnlock{}); 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 := service.NewVideoService(database.DB, config.AppConfig.ShortVideo) if err != nil { log.Fatalf("init video service failed: %v", err) } videoHandler := handler.NewVideoHandler(videoService) // 6) 注册路由:把 URL 映射到 handler routes.Register(router, database.DB, authHandler, videoHandler) // 7) 启动监听端口 addr := ":" + config.AppConfig.Server.Port if err := router.Run(addr); err != nil { log.Fatalf("server stopped: %v", err) } }