package main import ( "fmt" "log" "net/http" "d:\项目\dobaochet\backend\api" "d:\项目\dobaochet\backend\config" "d:\项目\dobaochet\backend\db" "d:\项目\dobaochet\backend\services" "github.com/gin-gonic/gin" ) func main() { // 加载配置 cfg, err := config.LoadConfig(".") if err != nil { log.Fatalf("加载配置失败: %v", err) } // 初始化数据库 _, err = db.InitDB(cfg) if err != nil { log.Fatalf("初始化数据库失败: %v", err) } // 创建Gin引擎 gin.SetMode(gin.ReleaseMode) r := gin.New() // 添加中间件 r.Use(gin.Logger()) r.Use(gin.Recovery()) r.Use(api.CORSMiddleware(cfg)) // 创建服务实例 aiService := services.NewAIService(cfg) quotaService := services.NewQuotaService(cfg) // 启动配额重置定时任务 quotaService.StartQuotaResetJob() // 创建API实例 userAPI := api.NewUserAPI(cfg) chatAPI := api.NewChatAPI(cfg, aiService) adminAPI := api.NewAdminAPI(cfg) // 注册路由 apiGroup := r.Group("/api") { // 用户相关路由 userAPI.RegisterRoutes(apiGroup) // 聊天相关路由 chatAPI.RegisterRoutes(apiGroup) // 管理员相关路由 adminAPI.RegisterRoutes(apiGroup) // 健康检查 apiGroup.GET("/health", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "status": "ok", "message": "豆包AI后端服务运行正常", }) }) } // 启动服务器 serverAddr := fmt.Sprintf("%s:%s", cfg.Server.Host, cfg.Server.Port) log.Printf("服务器启动在 %s", serverAddr) // 创建HTTP服务器 server := &http.Server{ Addr: serverAddr, Handler: r, ReadTimeout: cfg.Server.ReadTimeout, WriteTimeout: cfg.Server.WriteTimeout, } // 启动服务器 if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed { log.Fatalf("服务器启动失败: %v", err) } }