You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6.6 KiB
6.6 KiB
路由同步功能修改总结
修改概述
根据需求,对route_mappings表和相关程序逻辑进行了以下三个主要修改:
- 删除route_mappings表中的
created_at
、frontend_route
、auth_group
字段及对应的取值写入逻辑 - 将route_mappings表中
backend_route
字段的变量格式从冒号开头(:var
)改写为大括弧包围({var}
) - 将
description
字段设置值为controller中swagger注释@Summary
详细修改内容
1. 数据库模型修改
文件: backend/internal/auth/model/route_mapping.go
修改前:
type RouteMapping struct {
ID uint `gorm:"primarykey" json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
FrontendRoute string `json:"frontend_route"`
BackendRoute string `json:"backend_route"`
HTTPMethod string `json:"http_method"`
AuthGroup string `json:"auth_group"`
ResourceID *uint `json:"resource_id"`
Module string `json:"module"`
Description string `json:"description"`
Status int `gorm:"default:1" json:"status"`
}
修改后:
type RouteMapping struct {
ID uint `gorm:"primarykey" json:"id"`
UpdatedAt time.Time `json:"updated_at"`
BackendRoute string `json:"backend_route"`
HTTPMethod string `json:"http_method"`
ResourceID *uint `json:"resource_id"`
Module string `json:"module"`
Description string `json:"description"`
Status int `gorm:"default:1" json:"status"`
}
2. 路径格式转换功能
文件: backend/internal/auth/service/route_sync_service.go
新增方法:
// convertPathFormat 转换路径格式:将:var格式改为{var}格式
func (s *RouteSyncService) convertPathFormat(path string) string {
// 使用正则表达式替换:var格式为{var}格式
re := regexp.MustCompile(`:([a-zA-Z0-9_]+)`)
return re.ReplaceAllString(path, "{$1}")
}
转换示例:
/api/auth/users/:id
→/api/auth/users/{id}
/api/auth/roles/:roleId
→/api/auth/roles/{roleId}
/api/auth/permissions/:permissionId/assign
→/api/auth/permissions/{permissionId}/assign
3. Swagger注释解析功能
新增文件: backend/internal/auth/service/swagger_parser.go
主要功能:
- 解析Controller文件中的Swagger注释
- 提取
@Summary
、@Description
、@Tags
、@Router
等信息 - 支持路径参数匹配(如
:id
参数)
集成到RouteSyncService:
type RouteSyncService struct {
routeMappingRepo *repository.RouteMappingRepository
resourceRepo repository.ResourceRepository
log *zap.Logger
swaggerParser *SwaggerParser // 新增
}
4. 描述生成逻辑优化
修改方法: generateDescription
修改前: 基于HTTP方法和路径自动生成简单描述
修改后: 优先从Swagger注释中获取@Summary
,回退到原有逻辑
func (s *RouteSyncService) generateDescription(method, path string) string {
// 优先从Swagger注释中获取@Summary
if s.swaggerParser != nil {
summary := s.swaggerParser.GetSummary(method, path)
if summary != "" {
return summary
}
}
// 回退到原有逻辑
// ...
}
5. 数据库迁移
新增文件: backend/internal/auth/migration/remove_unused_fields.go
功能: 删除不再使用的字段
func RemoveUnusedFields(db *gorm.DB) error {
// 删除created_at字段
db.Exec("ALTER TABLE route_mappings DROP COLUMN IF EXISTS created_at")
// 删除frontend_route字段
db.Exec("ALTER TABLE route_mappings DROP COLUMN IF EXISTS frontend_route")
// 删除auth_group字段
db.Exec("ALTER TABLE route_mappings DROP COLUMN IF EXISTS auth_group")
return nil
}
6. 服务方法重构
修改的方法:
SyncFrontendRoute
→SyncRouteMapping
BatchSyncFrontendRoutes
→BatchSyncRouteMappings
GetFrontendRoutes
→GetRouteMappings
删除的方法:
getAuthGroupByMethod
(因为AuthGroup字段已删除)
使用示例
Controller注释规范
// Login 用户登录
// @Summary 用户登录
// @Description 用户登录接口,支持验证码验证和密码错误次数限制
// @Tags 认证
// @Accept json
// @Produce json
// @Param request body model.LoginRequest true "登录请求参数"
// @Success 200 {object} response.Response{data=model.LoginResponse} "登录成功"
// @Failure 400 {object} response.Response "请求参数错误"
// @Failure 401 {object} response.Response "认证失败"
// @Router /auth/login [post]
func (c *AuthController) Login(ctx *gin.Context) {
// 实现代码
}
路由同步结果
- 路径转换:
/api/auth/users/:id
→/api/auth/users/{id}
- 描述来源: 从
@Summary 用户登录
获取 - 字段简化: 只保留必要的字段
影响分析
正面影响
- 数据一致性: 路径格式统一使用
{var}
格式 - 描述准确性: 直接从Controller注释获取,更准确
- 表结构简化: 删除不必要的字段,减少存储空间
- 维护性提升: 描述与代码同步更新
注意事项
- 数据库迁移: 需要运行迁移脚本删除字段
- API兼容性: 前端调用需要适配新的路径格式
- 注释规范: 所有Controller方法需要添加完整的Swagger注释
部署步骤
-
运行数据库迁移:
go run main.go # 自动执行迁移
-
验证路由同步:
- 启动应用
- 检查route_mappings表数据
- 验证路径格式和描述内容
-
更新前端代码:
- 适配新的路径格式(如果需要)
- 更新API调用逻辑
测试验证
路径格式转换测试
// 测试用例
testCases := []struct{
input string
expected string
}{
{"/api/auth/users/:id", "/api/auth/users/{id}"},
{"/api/auth/roles/:roleId", "/api/auth/roles/{roleId}"},
{"/api/auth/permissions/:permissionId/assign", "/api/auth/permissions/{permissionId}/assign"},
}
Swagger解析测试
- 验证能正确解析Controller注释
- 验证路径参数匹配功能
- 验证描述提取准确性
总结
本次修改成功实现了三个主要需求:
- ✅ 删除了不必要的字段,简化了表结构
- ✅ 统一了路径参数格式为
{var}
形式 - ✅ 实现了从Swagger注释自动提取描述的功能
这些修改提高了系统的可维护性和数据一致性,为后续的功能扩展奠定了良好的基础。