88 lines
1.8 KiB
Go
88 lines
1.8 KiB
Go
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)
|
||
|
|
}
|
||
|
|
}
|