Files
junhong_cmp_fiber/internal/routes/registry.go
huang 384a54164b
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
feat: 新增批量移除角色权限接口
- 新增 DELETE /api/admin/roles/:role_id/permissions 接口
- Store 层新增 BatchDelete 方法,单次 SQL 批量软删除
- Service 层新增 BatchRemovePermissions 方法
- Handler 层新增 BatchRemovePermissions 处理函数
- DTO 新增 BatchRemovePermissionsRequest/Params
- 修复 openapi generator 对 DELETE 方法 requestBody 不生成的问题
- RouteSpec 新增 Body 字段,支持显式指定 JSON 请求体

💘 Generated with Crush

Assisted-by: Claude Sonnet 4.6 via Crush <crush@charm.land>
2026-04-09 11:41:58 +08:00

62 lines
2.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package routes
import (
"regexp"
"github.com/gofiber/fiber/v2"
"github.com/break/junhong_cmp_fiber/pkg/openapi"
)
// FileUploadField 定义文件上传字段
type FileUploadField struct {
Name string // 字段名
Description string // 字段描述
Required bool // 是否必填
}
// RouteSpec 定义接口文档元数据
type RouteSpec struct {
Summary string // 简短摘要(中文,一行)
Description string // 详细说明,支持 Markdown 语法(可选)
Input interface{} // 请求参数结构体 (Query/Path/Body)
Body interface{} // 显式 JSON 请求体(用于 DELETE 等方法,库不自动生成 requestBody 的场景)
Output interface{} // 响应参数结构体
Tags []string // 分类标签
Auth bool // 是否需要认证图标 (预留)
FileUploads []FileUploadField // 文件上传字段列表(设置此字段时请求类型为 multipart/form-data
}
// pathParamRegex 用于匹配 Fiber 的路径参数格式 /:param
var pathParamRegex = regexp.MustCompile(`/:([a-zA-Z0-9_]+)`)
// Register 封装后的注册函数
// router: Fiber 路由组
// doc: 文档生成器 (如果在运行 Web 服务时为 nil在生成文档时为非 nil)
// basePath: 当前路由组的基础路径 (用于文档生成)
// method, path: HTTP 方法和路径
// handler: Fiber Handler
// spec: 文档元数据
func Register(router fiber.Router, doc *openapi.Generator, basePath, method, path string, handler fiber.Handler, spec RouteSpec) {
router.Add(method, path, handler)
if doc != nil {
fullPath := basePath + path
openapiPath := pathParamRegex.ReplaceAllString(fullPath, "/{$1}")
if len(spec.FileUploads) > 0 {
fileFields := make([]openapi.FileUploadField, len(spec.FileUploads))
for i, f := range spec.FileUploads {
fileFields[i] = openapi.FileUploadField{
Name: f.Name,
Description: f.Description,
Required: f.Required,
}
}
doc.AddMultipartOperation(method, openapiPath, spec.Summary, spec.Description, spec.Input, spec.Output, spec.Auth, fileFields, spec.Tags...)
} else {
doc.AddOperation(method, openapiPath, spec.Summary, spec.Description, spec.Input, spec.Body, spec.Output, spec.Auth, spec.Tags...)
}
}
}