94 lines
2.7 KiB
Markdown
94 lines
2.7 KiB
Markdown
|
|
# 数据模型设计
|
|||
|
|
|
|||
|
|
本文档描述了项目核心领域的数据模型和数据库表结构。
|
|||
|
|
|
|||
|
|
## 1. 领域模型 (Domain Models)
|
|||
|
|
|
|||
|
|
### 1.1 Activity.java
|
|||
|
|
|
|||
|
|
代表一个营销活动。这是活动管理功能的核心实体。
|
|||
|
|
|
|||
|
|
- `id` (Long): 活动的唯一标识符,主键。
|
|||
|
|
- `name` (String): 活动的名称。
|
|||
|
|
- `startTime` (ZonedDateTime): 活动的开始时间。
|
|||
|
|
- `endTime` (ZonedDateTime): 活动的结束时间。
|
|||
|
|
- `targetUserIds` (Set<Long>): 允许参加活动的用户ID集合。如果为空,则表示对所有用户开放。
|
|||
|
|
- `rewardTiers` (List<RewardTier>): 奖励规则的层级列表。
|
|||
|
|
- `rewardMode` (RewardMode): 奖励模式(`CUMULATIVE` - 叠加, `DIFFERENTIAL` - 补差)。
|
|||
|
|
- `multiLevelRewardRules` (List<MultiLevelRewardRule>): 多级邀请奖励规则。
|
|||
|
|
|
|||
|
|
### 1.2 ApiKey.java
|
|||
|
|
|
|||
|
|
代表一个API密钥,用于授权外部系统访问特定活动的API。
|
|||
|
|
|
|||
|
|
- `id` (Long): 密钥的唯一标识符,主键。
|
|||
|
|
- `activityId` (Long): 关联的活动ID。
|
|||
|
|
- `name` (String): 方便用户识别的密钥名称。
|
|||
|
|
- `keyHash` (String): 经过哈希加盐处理的API密钥值。
|
|||
|
|
- `salt` (String): 用于哈希计算的盐值,Base64编码存储。
|
|||
|
|
|
|||
|
|
## 2. 数据库表设计 (Database Schema)
|
|||
|
|
|
|||
|
|
### 2.1 activities 表
|
|||
|
|
|
|||
|
|
由 `V1__Create_activities_table.sql` 创建。
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE activities (
|
|||
|
|
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|||
|
|
name VARCHAR(255) NOT NULL,
|
|||
|
|
start_time TIMESTAMP WITH TIME ZONE NOT NULL,
|
|||
|
|
end_time TIMESTAMP WITH TIME ZONE NOT NULL,
|
|||
|
|
-- 其他字段将根据需求添加
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.2 activity_rewards 表
|
|||
|
|
|
|||
|
|
由 `V2__Create_activity_rewards_table.sql` 创建。
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE activity_rewards (
|
|||
|
|
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|||
|
|
activity_id BIGINT NOT NULL,
|
|||
|
|
threshold INT NOT NULL,
|
|||
|
|
reward_type VARCHAR(50) NOT NULL,
|
|||
|
|
points INT,
|
|||
|
|
coupon_batch_id VARCHAR(255),
|
|||
|
|
FOREIGN KEY (activity_id) REFERENCES activities(id)
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.3 multi_level_reward_rules 表
|
|||
|
|
|
|||
|
|
由 `V3__Create_multi_level_reward_rules_table.sql` 创建。
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE multi_level_reward_rules (
|
|||
|
|
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|||
|
|
activity_id BIGINT NOT NULL,
|
|||
|
|
level INT NOT NULL,
|
|||
|
|
decay_coefficient DECIMAL(5, 4) NOT NULL,
|
|||
|
|
FOREIGN KEY (activity_id) REFERENCES activities(id),
|
|||
|
|
UNIQUE (activity_id, level)
|
|||
|
|
);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2.4 api_keys 表
|
|||
|
|
|
|||
|
|
由 `V4__Create_api_keys_table.sql` 创建。
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
CREATE TABLE api_keys (
|
|||
|
|
id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
|||
|
|
name VARCHAR(255) NOT NULL,
|
|||
|
|
key_hash VARCHAR(255) NOT NULL UNIQUE,
|
|||
|
|
salt VARCHAR(255) NOT NULL,
|
|||
|
|
created_at TIMESTAMP NOT NULL,
|
|||
|
|
revoked_at TIMESTAMP NULL,
|
|||
|
|
last_used_at TIMESTAMP NULL
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
CREATE INDEX idx_api_keys_key_hash ON api_keys(key_hash);
|
|||
|
|
```
|