# personal-customer-openid Specification

## Purpose
TBD - created by archiving change client-auth-system. Update Purpose after archive.
## Requirements
### Requirement: PersonalCustomerOpenID 模型定义

系统 MUST 新增 `PersonalCustomerOpenID` 模型与数据表 `tb_personal_customer_openid`，用于保存客户在不同 AppID 下的 OpenID 记录。

- 关键字段：
  - `id` uint，主键
  - `customer_id` uint，MUST，关联个人客户 ID
  - `app_id` string，MUST，微信应用标识
  - `open_id` string，MUST，当前应用下 OpenID
  - `union_id` string，可选，开放平台统一标识
  - `created_at`/`updated_at`/`deleted_at`
- 索引约束：
  - MUST 存在唯一索引 `UNIQUE(app_id, open_id)`（软删条件下唯一）

#### Scenario: 新增 OpenID 记录成功
- **WHEN** 登录流程创建新 OpenID 关系
- **THEN** 系统 SHALL 插入一条包含 `customer_id/app_id/open_id` 的记录

#### Scenario: 重复 app_id + open_id 被拒绝
- **WHEN** 试图插入已存在的 `(app_id, open_id)` 组合
- **THEN** 系统 MUST 触发唯一约束并拒绝写入

### Requirement: 与 PersonalCustomer 的关系约束

系统 SHALL 通过 `customer_id` 与 `PersonalCustomer` 建立逻辑关联（不使用数据库外键约束）。

#### Scenario: 根据 customer_id 查询 OpenID 列表
- **WHEN** 业务根据 `customer_id` 查询 OpenID
- **THEN** 系统 SHALL 返回该客户在多 AppID 下的全部有效记录

#### Scenario: 软删除客户后的记录处理
- **WHEN** 客户逻辑删除或状态失效
- **THEN** 系统 MUST 支持按业务策略同步停用或软删除 OpenID 记录

