Skip to content

用户管理页面增加新的筛选项 #564

@LordofAvernus

Description

@LordofAvernus

需求描述(Describe)

为用户列表接口 ListUsers 增加更细粒度的筛选能力,并增强模糊搜索范围:支持按邮箱(filter_by_email)、手机号(filter_by_phone)、用户状态(filter_by_stat)、认证类型(filter_by_authentication_type)、系统(filter_by_system)进行过滤;同时模糊搜索 fuzzy_keyword 扩展到匹配 uid/email/phone(与 name 一起按 OR 关系组合)。

本次变更依据当前分支最新 5 次提交:

  • 4a821c1f:新增邮箱/手机号/状态/认证类型/系统筛选入参
  • 2fce3513:模糊搜索扩展到 uid/email/phone
  • db50e71e:刷新 Swagger 文档
  • 4bd3e7bc:状态筛选改为字符串枚举
  • 808cc4ba:刷新 Swagger 文档

实现方案

  1. 扩展接口入参:在 pkg/dms-common/api/dms/v1/user.goListUserReq 中新增查询参数字段,并新增 UserStatFilter 字符串枚举类型。
  2. 后端筛选落地:在 internal/dms/service/user.goListUsers 中根据入参构建过滤条件(邮箱/手机号/状态/认证类型/系统),并将 fuzzy_keyword 组合为 OR 条件(name/uid/email/phone)。
  3. 参数透传:在 pkg/dms-common/dmsobject/user.go 中使用 url.Values 方式组装请求查询参数,确保新增筛选项随请求传递。
  4. 文档同步:执行 Swagger 生成更新 api/swagger.yaml / api/swagger.json,确保前端可按最新契约生成/调试请求。

变更影响面

受影响的模块或功能

  • 用户管理:用户列表查询与筛选(后端 internal/dms/service/user.go 与请求透传 pkg/dms-common/dmsobject/user.go
  • API 契约与文档:api/swagger.yaml / api/swagger.json(新增查询参数与枚举说明)
  • 前端查询页面(间接受影响):需要按新增参数与枚举值发起请求(尤其是 filter_by_stat

外部引用的潜在问题或风险

  • API 契约变更风险:filter_by_stat 使用字符串枚举值(Normal/Disabled),若现有调用方仍传 0/1 可能导致筛选失效或报错。
  • 参数兼容风险:新增参数虽然为可选,但若网关/中间层对未知 query 参数有拦截策略,可能影响请求。
  • 搜索行为变化:fuzzy_keyword 的命中字段变更为包含 uid/email/phone 后,结果集会比旧逻辑更宽,需要确认前端展示与分页体验。

版本兼容性

  • 新增筛选字段均为查询参数形式,原则上不破坏未使用这些参数的旧调用方。
  • 存在潜在兼容点:filter_by_stat 的取值语义从旧格式切换为字符串枚举,需要调用方对齐最新值;建议在服务端保持对旧值(如 0/1)的兼容策略或同步前端改造计划。

测试建议

  • 接口集成测试:
    • filter_by_email / filter_by_phone:分别覆盖命中与不命中场景
    • filter_by_stat:覆盖 NormalDisabled 两个枚举值(以及若需要兼容旧值再覆盖 0/1
    • filter_by_authentication_typefilter_by_system:覆盖枚举边界值
    • fuzzy_keyword:验证 OR 关系生效(分别构造 name/uid/email/phone 命中用例)
  • 回归测试:
    • 分页(page_size/page_index)、排序(order_by)、删除过滤(filter_del_user)不受新增筛选影响
  • 文档一致性验证:
    • 通过 Swagger UI 或契约测试工具校验新增 query 参数与枚举在文档中可用、参数名正确

变更涉及的关键文件(仅供定位)

  • pkg/dms-common/api/dms/v1/user.go
  • internal/dms/service/user.go
  • pkg/dms-common/dmsobject/user.go
  • api/swagger.yaml / api/swagger.json

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions