🎉 初始化项目
This commit is contained in:
106
server/initialize/router.go
Normal file
106
server/initialize/router.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user