# 账号管理接口规格

## ADDED Requirements

### Requirement: 统一账号管理路由结构
系统 SHALL 提供统一的账号管理路由，按账号类型分组。

#### Scenario: 平台账号管理路由
- **WHEN** 访问 /api/admin/accounts/platform/*
- **THEN** 提供平台账号的 CRUD + 角色管理功能

#### Scenario: 代理账号管理路由
- **WHEN** 访问 /api/admin/accounts/shop/*
- **THEN** 提供代理账号的 CRUD + 角色管理功能

#### Scenario: 企业账号管理路由
- **WHEN** 访问 /api/admin/accounts/enterprise/*
- **THEN** 提供企业账号的 CRUD + 角色管理功能

### Requirement: 所有账号类型支持完整的CRUD操作
系统 SHALL 为所有账号类型提供一致的 CRUD 功能。

#### Scenario: 创建账号
- **WHEN** POST /api/admin/accounts/{type}
- **THEN** 验证权限，创建账号，返回账号信息

#### Scenario: 查询账号列表
- **WHEN** GET /api/admin/accounts/{type}
- **THEN** 应用数据权限过滤，返回分页列表

#### Scenario: 查询账号详情
- **WHEN** GET /api/admin/accounts/{type}/:id
- **THEN** 验证权限，返回账号详情

#### Scenario: 更新账号
- **WHEN** PUT /api/admin/accounts/{type}/:id
- **THEN** 验证权限，更新账号，返回更新后信息

#### Scenario: 删除账号
- **WHEN** DELETE /api/admin/accounts/{type}/:id
- **THEN** 验证权限，软删除账号，返回成功

### Requirement: 所有账号类型支持密码和状态管理
系统 SHALL 为所有账号类型提供统一的密码和状态管理功能。

#### Scenario: 修改账号密码
- **WHEN** PUT /api/admin/accounts/{type}/:id/password
- **THEN** 验证权限，更新密码（bcrypt哈希），返回成功

#### Scenario: 启用账号
- **WHEN** PUT /api/admin/accounts/{type}/:id/status，status=1
- **THEN** 验证权限，更新状态为启用，返回成功

#### Scenario: 禁用账号
- **WHEN** PUT /api/admin/accounts/{type}/:id/status，status=0
- **THEN** 验证权限，更新状态为禁用，返回成功

### Requirement: 所有账号类型支持角色管理
系统 SHALL 为所有账号类型提供统一的角色管理功能。

#### Scenario: 分配角色
- **WHEN** POST /api/admin/accounts/{type}/:id/roles，body: {role_ids: [1,2]}
- **THEN** 验证权限，分配角色，返回成功

#### Scenario: 查询账号角色
- **WHEN** GET /api/admin/accounts/{type}/:id/roles
- **THEN** 验证权限，返回账号的所有角色列表

#### Scenario: 移除角色
- **WHEN** DELETE /api/admin/accounts/{type}/:id/roles/:role_id
- **THEN** 验证权限，软删除角色关联，返回成功

#### Scenario: 清空所有角色
- **WHEN** POST /api/admin/accounts/{type}/:id/roles，body: {role_ids: []}
- **THEN** 验证权限，删除所有角色关联，返回成功

### Requirement: 删除旧路由避免冲突
系统 SHALL 删除旧的账号管理路由，避免与新路由冲突。

#### Scenario: 旧平台账号路由404
- **WHEN** 访问 POST /api/admin/platform-accounts
- **THEN** 返回 404 Not Found

#### Scenario: 旧代理账号路由404
- **WHEN** 访问 GET /api/admin/shop-accounts
- **THEN** 返回 404 Not Found

#### Scenario: 旧企业账号路由404
- **WHEN** 访问 POST /api/admin/customer-accounts
- **THEN** 返回 404 Not Found

### Requirement: 响应格式保持一致
系统 SHALL 为所有账号类型返回一致的响应格式。

#### Scenario: 创建响应包含完整账号信息
- **WHEN** 创建账号成功
- **THEN** 返回账号 ID、用户名、手机号、用户类型、状态、创建时间

#### Scenario: 列表响应包含分页信息
- **WHEN** 查询账号列表
- **THEN** 返回 {items, total, page, size}

#### Scenario: 错误响应使用统一格式
- **WHEN** 操作失败
- **THEN** 返回 {code, message, timestamp}

### Requirement: 支持按条件筛选账号列表
系统 SHALL 支持按多个条件筛选账号列表。

#### Scenario: 按用户名筛选
- **WHEN** GET /api/admin/accounts/{type}?username=张三
- **THEN** 返回用户名包含"张三"的账号列表

#### Scenario: 按手机号筛选
- **WHEN** GET /api/admin/accounts/{type}?phone=138
- **THEN** 返回手机号包含"138"的账号列表

#### Scenario: 按状态筛选
- **WHEN** GET /api/admin/accounts/{type}?status=1
- **THEN** 返回状态为启用的账号列表

#### Scenario: 按店铺ID筛选（代理账号）
- **WHEN** GET /api/admin/accounts/shop?shop_id=100
- **THEN** 返回 shop_id=100 的代理账号列表（需权限验证）

#### Scenario: 按企业ID筛选（企业账号）
- **WHEN** GET /api/admin/accounts/enterprise?enterprise_id=50
- **THEN** 返回 enterprise_id=50 的企业账号列表（需权限验证）

### Requirement: 统一Service层实现消除重复
系统 SHALL 使用单一 AccountService 处理所有账号类型，消除代码重复。

#### Scenario: AccountService处理所有账号类型
- **WHEN** 调用 AccountService.Create(ctx, req)
- **THEN** 根据 req.UserType 创建不同类型账号（平台、代理、企业）

#### Scenario: 删除ShopAccountService
- **WHEN** 系统重构完成
- **THEN** ShopAccountService 及相关文件应被删除

#### Scenario: 删除CustomerAccountService
- **WHEN** 系统重构完成
- **THEN** CustomerAccountService 及相关文件应被删除
