主要变更: - 新增B端认证系统(后台+H5):登录、登出、Token刷新、密码修改 - 完善商户管理和商户账号管理功能 - 补全单元测试(ShopService: 72.5%, ShopAccountService: 79.8%) - 新增集成测试(商户管理+商户账号管理) - 归档OpenSpec提案(add-shop-account-management, implement-b-end-auth-system) - 完善文档(使用指南、API文档、认证架构说明) 测试统计: - 13个测试套件,37个测试用例,100%通过率 - 平均覆盖率76.2%,达标 OpenSpec验证:通过(strict模式)
5.9 KiB
5.9 KiB
shop-account-management Specification
Purpose
TBD - created by archiving change add-shop-account-management. Update Purpose after archive.
Requirements
Requirement: 代理商账号分页列表查询
系统 SHALL 提供代理商账号分页列表查询功能,支持按店铺ID和账号名称过滤(均为可选条件),返回账号基本信息。
Scenario: 查询指定店铺的账号列表
- WHEN 用户传入店铺ID查询参数(不传账号名称)
- THEN 返回该店铺的所有账号(user_type=3 且 shop_id=指定店铺ID)
- AND 包含分页信息(总数、当前页、每页数量)
- AND 每条记录包含:账号名称(username)、手机号、创建时间
Scenario: 按账号名称模糊查询
- WHEN 用户传入账号名称查询参数(不传店铺ID)
- THEN 返回账号名称包含该关键字的所有代理商账号(user_type=3)
- AND 使用 LIKE 模糊匹配
- AND 支持分页
Scenario: 组合条件查询
- WHEN 用户同时传入店铺ID和账号名称查询参数
- THEN 返回同时满足两个条件的账号
- AND 使用 AND 逻辑组合条件
- AND shop_id = 指定店铺ID AND username LIKE '%关键字%'
Scenario: 查询所有代理商账号(无过滤条件)
- WHEN 用户不传任何查询条件(店铺ID和账号名称都为空)
- AND 当前用户是平台管理员
- THEN 返回所有代理商账号(user_type=3)
- AND 支持分页
Scenario: 数据权限过滤
- WHEN 代理账号访问账号列表(无论是否传查询条件)
- THEN 通过 GORM Callback 自动过滤
- AND 只返回当前店铺及下级店铺的账号
- AND 在数据权限过滤的基础上,再应用用户传入的查询条件
Scenario: 空结果处理
- WHEN 查询条件无匹配结果
- THEN 返回空数组
- AND 总数为 0
- AND HTTP 状态码 200
Requirement: 代理商账号新增
系统 SHALL 提供代理商账号新增功能,支持创建绑定到指定店铺的代理账号。
Scenario: 新增代理商账号
- WHEN 用户提交新增账号请求
- AND 提供账号名称、手机号、登录密码、关联店铺ID
- THEN 验证店铺存在且未删除
- AND 验证手机号唯一性(未被使用)
- AND 验证账号名称唯一性(未被使用)
- AND 密码使用 bcrypt 加密
- AND 创建账号(user_type=3,shop_id=指定店铺ID)
- AND 状态默认为启用(status=1)
- AND 返回新创建的账号信息(不包含密码)
Scenario: 手机号已存在
- WHEN 用户提交的手机号已被使用
- THEN 返回错误码 2002(手机号已存在)
- AND HTTP 状态码 400
Scenario: 账号名称已存在
- WHEN 用户提交的账号名称已被使用
- THEN 返回错误码 2001(用户名已存在)
- AND HTTP 状态码 400
Scenario: 关联店铺不存在
- WHEN 用户提交的店铺ID不存在或已删除
- THEN 返回错误码 2103(店铺不存在)
- AND HTTP 状态码 404
Requirement: 代理商账号编辑
系统 SHALL 提供代理商账号编辑功能,支持更新账号名称,但不允许修改密码和手机号。
Scenario: 更新账号名称
- WHEN 用户提交编辑账号请求(更新账号名称)
- THEN 验证账号存在且未删除
- AND 验证新账号名称唯一性(如果修改)
- AND 更新账号名称
- AND 更新 updater 字段为当前用户ID
- AND 返回更新后的账号信息
Scenario: 不允许修改手机号
- WHEN 编辑请求中包含手机号字段
- THEN 忽略该字段
- AND 不更新手机号
Scenario: 不允许修改密码
- WHEN 编辑请求中包含密码字段
- THEN 忽略该字段
- AND 不更新密码
- AND 密码修改需通过专用接口
Scenario: 编辑不存在的账号
- WHEN 用户尝试编辑不存在或已删除的账号
- THEN 返回错误码 2101(账号不存在)
- AND HTTP 状态码 404
Requirement: 代理商账号密码修改
系统 SHALL 提供代理商账号密码修改功能,支持管理员重置密码,不需要验证旧密码。
Scenario: 管理员重置密码
- WHEN 管理员提交密码修改请求
- AND 提供新密码
- THEN 验证账号存在且未删除
- AND 验证新密码格式(8-32位)
- AND 使用 bcrypt 加密新密码
- AND 更新账号密码
- AND 更新 updater 字段为当前用户ID
- AND 返回成功响应
Scenario: 新密码格式验证
- WHEN 用户提交的新密码不符合要求(长度不在8-32位)
- THEN 返回参数验证错误
- AND HTTP 状态码 400
Scenario: 修改不存在账号的密码
- WHEN 用户尝试修改不存在或已删除账号的密码
- THEN 返回错误码 2101(账号不存在)
- AND HTTP 状态码 404
Requirement: 代理商账号启用/禁用
系统 SHALL 提供代理商账号启用/禁用功能,支持快速切换账号状态。
Scenario: 启用账号
- WHEN 管理员提交启用账号请求
- THEN 验证账号存在且未删除
- AND 更新账号状态为 1(启用)
- AND 更新 updater 字段为当前用户ID
- AND 返回成功响应
Scenario: 禁用账号
- WHEN 管理员提交禁用账号请求
- THEN 验证账号存在且未删除
- AND 更新账号状态为 0(禁用)
- AND 更新 updater 字段为当前用户ID
- AND 返回成功响应
Scenario: 禁用后的账号无法登录
- WHEN 账号状态为禁用(status=0)
- AND 用户尝试使用该账号登录
- THEN 登录失败
- AND 返回账号已禁用错误
Scenario: 操作不存在的账号
- WHEN 用户尝试启用/禁用不存在或已删除的账号
- THEN 返回错误码 2101(账号不存在)
- AND HTTP 状态码 404