Files
ai-code-review/main.go

75 lines
1.7 KiB
Go

package main
import (
"code-review/config"
"code-review/handlers"
"code-review/services"
"code-review/services/ai"
"code-review/utils"
"fmt"
"log"
"github.com/gin-gonic/gin"
)
func main() {
// 初始化日志系统
if err := utils.InitLogger(); err != nil {
log.Fatalf("初始化日志系统失败: %v", err)
}
defer utils.CloseLogger()
if err := config.LoadConfig("config.yaml"); err != nil {
log.Fatalf("加载配置失败: %v", err)
}
cfg := config.GetConfig()
// 检查是否有可用的 AI 配置
if len(cfg.AIs) == 0 {
log.Fatalf("未找到有效的 AI 配置")
}
// 初始化 AI 负载均衡器
config.ResetAIBalancer(cfg.AIs)
// 获取一个 AI 配置
aiConfig, err := config.GetAIBalancer().Next()
if err != nil {
log.Fatalf("获取 AI 配置失败: %v", err)
}
// 创建 AI 客户端和审查器
client := ai.NewClient(
aiConfig.APIBase,
aiConfig.APIKey,
aiConfig.Model,
aiConfig.Type,
aiConfig.Temperature,
)
reviewer := ai.NewAI(aiConfig.Model, aiConfig.SystemMsg, client)
// 创建服务和处理器
reviewService := services.NewReviewService(reviewer)
webhookHandler := handlers.NewWebhookHandler(reviewService)
configHandler := handlers.NewConfigHandler(cfg)
// 初始化路由
r := gin.Default()
r.Static("/static", "./static")
r.StaticFile("/", "./static/index.html")
api := r.Group("/api")
configAPI := api.Group("/config")
configAPI.Use(handlers.AuthRequired())
{
configAPI.GET("", configHandler.GetConfig)
configAPI.POST("", configHandler.UpdateConfig)
}
api.POST("/webhook/:platform", webhookHandler.HandleWebhook)
log.Printf("服务启动在 :%d", cfg.Port)
if err := r.Run(fmt.Sprintf(":%d", cfg.Port)); err != nil {
log.Fatalf("服务器启动失败: %v", err)
}
}