package main import ( "ai_xhs/config" "ai_xhs/database" "ai_xhs/middleware" "ai_xhs/router" "ai_xhs/service" // "ai_xhs/tools" // 临时注释,避免包冲突 "ai_xhs/utils" "flag" "fmt" "log" "github.com/gin-gonic/gin" ) func main() { // 解析命令行参数 env := flag.String("env", "dev", "运行环境: dev, prod") flag.Parse() // 加载配置 if err := config.LoadConfig(*env); err != nil { log.Fatalf("配置加载失败: %v", err) } // 初始化数据库 if err := database.InitDB(); err != nil { log.Fatalf("数据库初始化失败: %v", err) } // 初始化Redis if err := database.InitRedis(); err != nil { log.Fatalf("Redis初始化失败: %v", err) } defer database.CloseRedis() // 初始化OSS log.Printf("OSS配置: Endpoint=%s, AccessKeyID=%s..., AccessKeySecret=%s..., BucketName=%s", config.AppConfig.Upload.OSS.Endpoint, config.AppConfig.Upload.OSS.AccessKeyID[:8], config.AppConfig.Upload.OSS.AccessKeySecret[:8], config.AppConfig.Upload.OSS.BucketName) if err := utils.InitOSS(); err != nil { log.Fatalf("OSS初始化失败: %v", err) } log.Println("OSS客户端初始化成功") // 初始化短信服务 smsService := service.GetSmsService() smsService.StartCleanupTask() log.Println("短信服务已初始化") // 启动服务监控(宕机时发送短信通知) // 临时注释:避免tools包冲突导致编译失败 // monitor := tools.GetServiceMonitor("15707023967", "AI小红书服务") // monitor.StartMonitoring() // log.Println("服务监控已启动") // 自动迁移数据库表 //if err := database.AutoMigrate(); err != nil { // log.Fatalf("数据库迁移失败: %v", err) //} // 初始化定时任务 if config.AppConfig.Scheduler.Enabled { scheduler := service.NewSchedulerService( config.AppConfig.Scheduler.MaxConcurrent, config.AppConfig.Scheduler.PublishTimeout, ) if err := scheduler.Start(config.AppConfig.Scheduler.PublishCron); err != nil { log.Fatalf("定时任务启动失败: %v", err) } log.Println("定时任务服务已启动") defer scheduler.Stop() } else { log.Println("定时任务服务已禁用") } // 设置运行模式 gin.SetMode(config.AppConfig.Server.Mode) // 创建路由 r := gin.New() // 添加中间件 r.Use(gin.Recovery()) // 崩溃恢复 r.Use(middleware.RequestLogger()) // API请求日志 // 设置路由 router.SetupRouter(r) // 启动服务 addr := fmt.Sprintf(":%d", config.AppConfig.Server.Port) log.Printf("服务启动在端口 %s, 环境: %s", addr, *env) if err := r.Run(addr); err != nil { log.Fatalf("服务启动失败: %v", err) } }