创建相关issues
This commit is contained in:
22
.scratch/ur60-shop-phone-search/issues/01-修复店铺列表参数校验与默认分页.md
Normal file
22
.scratch/ur60-shop-phone-search/issues/01-修复店铺列表参数校验与默认分页.md
Normal file
@@ -0,0 +1,22 @@
|
||||
# 01 — 修复店铺列表参数校验与默认分页
|
||||
|
||||
**What to build:** 让 API 调用方通过现有店铺列表接口获得可信的参数校验和分页行为:所有已声明查询参数在进入查询前完成统一解析与完整校验,非法参数只返回脱敏的统一参数错误;未提供分页参数时,数据库查询与响应元数据都明确使用第 1 页、每页 20 条。该行为通过真实认证链路和数据服务独立验收,并同步固化到接口契约与需求文档。
|
||||
|
||||
**Blocked by:** None — can start immediately.
|
||||
|
||||
**Status:** ready-for-agent
|
||||
|
||||
**架构通道:** 主通道为现有读取链路 `Handler → Service → Store → GORM/DTO`;不迁移到新的 Query 或 DDD 模块。
|
||||
|
||||
**完整业务边界:** 仅收口店铺列表请求参数校验、错误脱敏和分页一致性。明确不修改其他 Handler 的校验方式,不迁移店铺模块,不改变列表响应结构、已有筛选语义、排序或数据权限。
|
||||
|
||||
- [ ] 店铺列表在查询参数解析后对整个请求 DTO 执行校验,覆盖分页、名称、编号、上级店铺、层级和状态的既有约束。
|
||||
- [ ] 查询参数解析失败或任一字段校验失败时,不执行店铺查询;客户端收到 HTTP 400、`code=1001`、`msg=参数验证失败`、`data=null` 和时间戳,响应不包含解析器或 Validator 的具体错误文本。
|
||||
- [ ] 服务端日志保留请求上下文和具体失败原因,但不记录数据库密码、JWT 密钥或其他敏感配置。
|
||||
- [ ] 未传 `page` 和 `page_size` 时,查询前归一化为第 1 页、每页 20 条,并在响应中返回 `page=1`、`size=20`。
|
||||
- [ ] 显式提供的合法页码和每页数量原样生效,不因任何筛选条件被后端重置。
|
||||
- [ ] HTTP 集成测试通过进程内 Fiber App、真实后台认证中间件、真实 PostgreSQL、Redis 和 JWT 配置验证成功及失败响应;测试数据和 Token 状态使用唯一标识并严格清理。
|
||||
- [ ] 集成测试覆盖非法分页、非法层级、非法状态、超长名称或编号、默认分页、显式分页、未认证及无效 Token 等关键行为。
|
||||
- [ ] OpenAPI 准确描述店铺列表已有字段的校验限制和分页契约,生成结果中不出现与本切片无关的漂移。
|
||||
- [ ] UR#60 中文总结及 README 索引记录本切片的参数错误协议、默认分页行为、验证证据和明确不迁移的旧代码范围。
|
||||
- [ ] 运行本切片目标测试、格式化、静态检查和相关构建,确认该行为可独立交付且不破坏原店铺列表语义。
|
||||
@@ -0,0 +1,27 @@
|
||||
# 02 — 交付联系电话精确查询与数据库索引
|
||||
|
||||
**What to build:** 让有权限的后台运营人员能够在店铺列表页面输入完整的 11 位 ASCII 联系电话并精确定位所有可见匹配店铺。该切片贯通前端筛选交互、现有列表 API、数据权限、数据库等值查询和性能索引,并用真实请求完成加载、空态、失败、组合筛选和重复号码验收。
|
||||
|
||||
**Blocked by:** 01 — 修复店铺列表参数校验与默认分页。
|
||||
|
||||
**Status:** ready-for-human
|
||||
|
||||
**架构通道:** 主通道为现有读取链路 `Handler → Service → Store → GORM/DTO`;辅助通道为 Infrastructure 数据库迁移和跨仓前端交付。
|
||||
|
||||
**完整业务边界:** 完整收口店铺列表联系电话精确查询这一用户行为,包括后端、数据库、前端、接口契约和验收证据。明确不修改店铺创建或更新接口的电话校验,不清洗历史号码,不建立唯一约束,不新增缓存、聚合、Repository 抽象或 Query 目录,也不改变前端既有页码状态策略。
|
||||
|
||||
- [ ] 店铺列表接受可选 `contact_phone` 参数;非空值必须完整满足 11 位 ASCII 数字规则,空字符串与未传参数均视为不启用电话筛选。
|
||||
- [ ] 联系电话使用数据库等值匹配,不接受空格、全角数字、国家码、连字符、字母或长度不符的输入,也不执行 trim 或号码格式修复。
|
||||
- [ ] 联系电话与所有已有筛选条件按 AND 组合,计数查询与分页数据查询使用完全一致的过滤条件。
|
||||
- [ ] 相同联系电话的多个可见店铺均可返回;无匹配项返回成功空分页,不返回资源不存在错误。
|
||||
- [ ] 查询保持 `created_at DESC` 排序并排除软删除记录;代理账号无法通过相同联系电话看到本店铺及下级范围之外的店铺。
|
||||
- [ ] 超级管理员、平台账号和代理账号的真实 HTTP 集成测试覆盖精确匹配、非模糊匹配、重复号码、组合筛选、空参数、非法格式、空结果、分页、排序、软删除和数据隔离。
|
||||
- [ ] 数据库查询失败时返回脱敏的 HTTP 500、`code=2001`、`msg=内部服务器错误`,响应不泄露 SQL、主机、库名或驱动错误。
|
||||
- [ ] 数据库迁移创建名为 `idx_shop_contact_phone` 的非唯一部分 B-tree 索引,仅覆盖未软删除店铺的 `contact_phone`;回滚只删除该索引,不修改业务数据。
|
||||
- [ ] 在可控开发环境验证向上迁移、向下回滚和再次向上迁移,确认索引类型、列、非唯一属性及 `deleted_at IS NULL` 条件均符合契约。
|
||||
- [ ] OpenAPI 出现 `contact_phone`,准确描述 11 位 ASCII 数字、精确匹配、空值行为、AND 组合和分页限制;复用现有 Handler,不新增文档生成器实例。
|
||||
- [ ] 后台店铺列表筛选区提供“联系电话”输入、查询和清空能力;非法值展示中文提示并阻止请求,空值不提交该参数,合法值与其他筛选一并提交。
|
||||
- [ ] 前端查询期间展示加载状态,无匹配项展示空态,请求失败展示可重试反馈且不保留伪装成新结果的旧数据。
|
||||
- [ ] 浏览器网络请求与真实接口响应共同证明精确匹配、AND 组合、重复号码、空结果、合法分页和代理隔离,而不是只依据页面展示验收。
|
||||
- [ ] UR#60 中文总结及 README 索引记录本切片的前后端契约、索引上线与回滚核验、测试证据以及明确排除的历史数据清理范围。
|
||||
- [ ] 运行前后端各自的目标测试、格式化、静态检查和构建;本切片通过人工验收后可独立演示完整联系电话查询行为。
|
||||
@@ -0,0 +1,22 @@
|
||||
# 03 — 禁止企业账号访问核心店铺管理路由
|
||||
|
||||
**What to build:** 让企业账号在调用店铺列表、创建、更新、删除和联级查询五个核心店铺管理入口时始终得到一致的禁止访问响应,同时保持超级管理员、平台账号和代理账号的现有能力,并证明其他 `/shops` 前缀业务入口未被误拦截。该权限行为通过真实认证请求独立验收,并同步固化到接口与需求文档。
|
||||
|
||||
**Blocked by:** None — can start immediately.
|
||||
|
||||
**Status:** ready-for-agent
|
||||
|
||||
**架构通道:** 路由与中间件权限通道;列表读取仍沿用现有读取链路。
|
||||
|
||||
**完整业务边界:** 只收口五个核心店铺管理路由的企业账号访问限制。明确不重新设计店铺角色、代理商资金概况、提现、佣金、钱包流水等独立路由的权限,也不改变认证机制或其他账号类型的数据范围。
|
||||
|
||||
- [ ] 企业账号访问店铺列表、创建、更新、删除或联级查询时,统一收到 HTTP 403、`code=1005`、`msg=无权限访问店铺管理功能`、`data=null` 和时间戳。
|
||||
- [ ] 企业账号在进入核心 Handler 和业务查询前被拒绝,不能因没有代理店铺范围而获得全局店铺数据。
|
||||
- [ ] 超级管理员和平台账号继续拥有原有核心店铺管理能力;代理账号继续遵循本店铺及全部下级店铺的数据范围。
|
||||
- [ ] 访问限制只作用于五个核心店铺管理路由,不误拦截店铺角色、代理商资金概况、提现、佣金、钱包流水等独立路由。
|
||||
- [ ] 真实 HTTP 集成测试覆盖四类账号的核心列表行为,以及企业账号访问其余四个核心路由的 403 行为。
|
||||
- [ ] 回归测试证明独立 `/shops` 前缀路由仍由各自已有权限规则处理,未因路由分组调整产生权限漂移。
|
||||
- [ ] 成功和拒绝响应均保持统一 `code`、`msg`、`data`、`timestamp` 外层结构,认证失败仍沿用既有认证错误契约。
|
||||
- [ ] OpenAPI 或对应接口说明准确记录核心店铺管理的账号权限边界,不改变店铺角色、资金、佣金、提现和钱包流水的既有契约。
|
||||
- [ ] UR#60 中文总结及 README 索引记录本切片的五个受限入口、未受影响路由、四类账号验证证据和明确不重新设计的授权范围。
|
||||
- [ ] 运行本切片目标测试、格式化、静态检查和相关构建,确认权限切片能够独立发布和回滚。
|
||||
Reference in New Issue
Block a user