Beacon/routers/router.go
2025-06-27 12:10:54 +08:00

139 lines
3.3 KiB
Go

package routers
import (
"beacon/config"
_ "beacon/docs"
"beacon/middleware"
"beacon/pkg/logger"
"beacon/routers/handlers"
"github.com/gin-gonic/gin"
swaggerFiles "github.com/swaggo/files"
ginSwagger "github.com/swaggo/gin-swagger"
)
func Init() *gin.Engine {
// 基于获取引擎对象(路由对象)
r := gin.New()
r.Use(middleware.GinLogger(logger.Lg))
r.Use(middleware.GinRecovery(logger.Lg, false))
//r.Use(middleware.AntiCrawlingStrategy()) // 反爬虫策略
r.Use(middleware.CSRFMiddleware)
//r.Use(middleware.JwtAuthMiddleware()) // 用户认证
// 设置自定义 404 页面
r.NoRoute(func(c *gin.Context) {
// 您可以使用 HTML 模板文件
//c.HTML(404, "404.html", gin.H{
// "title": "Page Not Found",
//})
// 或者,您可以直接返回 HTML 代码
c.Data(404, "text/html", []byte(`<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>404 Not Found</title>
<style>
body {
font-family: sans-serif;
margin: 0;
padding: 0;
background-color: #f5f5f5;
}
.container {
display: flex;
justify-content: center;
align-items: center;
text-align: center;
height: 100vh;
}
.content {
max-width: 600px;
padding: 30px;
background-color: #fff;
}
h1 {
font-size: 36px;
margin-bottom: 20px;
}
p {
font-size: 18px;
line-height: 1.5em;
}
a {
color: #000;
text-decoration: none;
}
</style>
</head>
<body>
<div class="container">
<div class="content">
<h1>404</h1>
<h2>Page Not Found</h2>
<p>The page you are looking for does not exist or has been moved.</p>
<p>You can <a href="/">go back to the homepage</a> or <a href="mailto:support@example.com">contact us</a> if you need assistance.</p>
</div>
</div>
</body>
</html>
`))
})
// 路由分组
v1 := r.Group(config.Conf.Version)
SetupCompositeCaseRoutes(v1)
SetupWorkflowRoutes(v1)
SetupTestRoutes(v1)
// 添加 Swagger 中间件
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
return r
}
func SetupCompositeCaseRoutes(group *gin.RouterGroup) {
// 初始化服务和处理器
//var handler *handlers.CompositeCaseHandler
handler := *handlers.NewCompositeCaseHandler()
api := group.Group("/api")
{
// 复合案例相关路由
api.POST("/composite-cases", handler.CreateCompositeCase)
api.GET("/composite-cases", handler.ListCompositeCases)
api.GET("/composite-cases/:id", handler.GetCompositeCase)
api.PUT("/composite-cases/:id", handler.UpdateCompositeCase)
api.DELETE("/composite-cases/:id", handler.DeleteCompositeCase)
}
}
func SetupWorkflowRoutes(group *gin.RouterGroup) {
// 初始化服务和处理器
handler := *handlers.NewWorkflowHandler()
api := group.Group("/api")
{
// 工作流相关路由
api.POST("/workflows/start", handler.StartWorkflow)
api.GET("/workflows/:id", handler.GetWorkflowStatus)
api.GET("/workflows/:id/results", handler.GetWorkflowResults)
}
}
func SetupTestRoutes(group *gin.RouterGroup) {
// 测试相关路由
testHandler := handlers.NewTestHandler()
api := group.Group("/api")
{
api.POST("/test/test-endpoint", testHandler.TestEndpoint)
api.POST("/test/core-transfer", testHandler.CoreTransferEndpoint)
}
}