🎉 初始化项目

This commit is contained in:
2026-03-03 06:05:51 +08:00
commit e1c70fe218
241 changed files with 148285 additions and 0 deletions

106
server/initialize/router.go Normal file
View File

@@ -0,0 +1,106 @@
package initialize
import (
"net/http"
"os"
"git.echol.cn/loser/ai_proxy/server/docs"
"git.echol.cn/loser/ai_proxy/server/global"
"git.echol.cn/loser/ai_proxy/server/router"
"github.com/gin-gonic/gin"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
)
type justFilesFilesystem struct {
fs http.FileSystem
}
func (fs justFilesFilesystem) Open(name string) (http.File, error) {
f, err := fs.fs.Open(name)
if err != nil {
return nil, err
}
stat, err := f.Stat()
if stat.IsDir() {
return nil, os.ErrPermission
}
return f, nil
}
// Routers 初始化总路由
func Routers() *gin.Engine {
Router := gin.New()
// 设置文件上传大小限制10MB
Router.MaxMultipartMemory = 10 << 20
// 使用 Gin 默认的 Recovery 中间件
Router.Use(gin.Recovery())
if gin.Mode() == gin.DebugMode {
Router.Use(gin.Logger())
}
// 简单的 CORS 中间件
Router.Use(func(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With, x-token")
c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT, DELETE")
if c.Request.Method == "OPTIONS" {
c.AbortWithStatus(204)
return
}
c.Next()
})
systemRouter := router.RouterGroupApp.System
appRouter := router.RouterGroupApp.App
// 静态文件服务
Router.StaticFS(global.GVA_CONFIG.Local.StorePath, justFilesFilesystem{http.Dir(global.GVA_CONFIG.Local.StorePath)})
// Swagger 文档
docs.SwaggerInfo.BasePath = global.GVA_CONFIG.System.RouterPrefix
Router.GET(global.GVA_CONFIG.System.RouterPrefix+"/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
global.GVA_LOG.Info("register swagger handler")
// 路由组
PublicGroup := Router.Group(global.GVA_CONFIG.System.RouterPrefix)
{
// 健康检查
PublicGroup.GET("/health", func(c *gin.Context) {
c.JSON(http.StatusOK, "ok")
})
}
// 系统管理路由
{
systemGroup := PublicGroup.Group("v1/system")
systemRouter.UserRouter.InitUserRouter(systemGroup) // 用户管理路由:/v1/system/user/*
systemRouter.ApiRouter.InitApiRouter(systemGroup) // API管理路由/v1/system/api/*
}
// 前台应用路由
{
appGroup := PublicGroup.Group("app")
appRouter.AiPresetRouter.InitAiPresetRouter(appGroup) // AI预设路由/app/preset/*
appRouter.AiProviderRouter.InitAiProviderRouter(appGroup) // AI提供商路由/app/provider/*
appRouter.PresetBindingRouter.InitPresetBindingRouter(appGroup) // 预设绑定路由:/app/binding/*
}
// OpenAI 兼容的代理接口
{
v1Group := PublicGroup.Group("v1")
appRouter.AiProxyRouter.InitAiProxyRouter(v1Group) // /v1/chat/completions
}
global.GVA_ROUTERS = Router.Routes()
global.GVA_LOG.Info("router register success")
return Router
}