- 添加用户认证模块 (JWT + 密码管理) - 添加 ChatGPT 账户管理功能 - 添加卡密管理功能 (创建、批量生成、查询) - 添加邀请功能 - 配置数据库迁移和路由系统
7.1 KiB
7.1 KiB
GPT Manager 数据库表结构
此项目共有 6 张表,用于实现 ChatGPT Team 账号管理与邀请系统。
1. admins - 管理员表
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
id |
Integer | PK | 主键 |
username |
String(50) | UNIQUE, NOT NULL, INDEX | 用户名 |
email |
String(120) | UNIQUE, NOT NULL, INDEX | 邮箱 |
password_hash |
String(128) | NOT NULL | 密码哈希 (bcrypt) |
is_super_admin |
Boolean | NOT NULL, DEFAULT FALSE | 是否超级管理员 |
is_active |
Boolean | NOT NULL, DEFAULT TRUE | 是否激活 |
created_at |
DateTime | NOT NULL | 创建时间 |
last_login |
DateTime | NULLABLE | 最后登录时间 |
关系: → card_keys (一对多) / → api_keys (一对多)
2. chatgpt_accounts - ChatGPT Team 账号表
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
id |
Integer | PK | 主键 |
name |
String(100) | NOT NULL | 账号名称 |
email |
String(120) | NOT NULL | 邮箱地址 |
auth_token |
Text | NOT NULL | 授权 Token |
team_account_id |
String(100) | NOT NULL | Team Account ID (UUID) |
max_invitations |
Integer | NOT NULL, DEFAULT 50 | 最大邀请数 |
current_invitations |
Integer | NOT NULL, DEFAULT 0 | 当前已用邀请数 |
is_active |
Boolean | NOT NULL, DEFAULT TRUE, INDEX | 是否激活 |
consecutive_failures |
Integer | NOT NULL, DEFAULT 0 | 连续失败次数 |
last_check |
DateTime | NULLABLE | 最后检测时间 |
last_used |
DateTime | NULLABLE | 最后使用时间 |
created_at |
DateTime | NOT NULL | 创建时间 |
updated_at |
DateTime | NULLABLE | 更新时间 |
关系: → invitations (一对多)
3. card_keys - 卡密表
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
id |
Integer | PK | 主键 |
key |
String(19) | UNIQUE, NOT NULL, INDEX | 卡密 (XXXX-XXXX-XXXX-XXXX) |
max_uses |
Integer | NOT NULL, DEFAULT 1 | 最大使用次数 |
used_count |
Integer | NOT NULL, DEFAULT 0 | 已使用次数 |
validity_type |
String(20) | NOT NULL | 有效期类型 (month/quarter/year/custom) |
expires_at |
DateTime | NOT NULL, INDEX | 过期时间 |
is_active |
Boolean | NOT NULL, DEFAULT TRUE, INDEX | 是否激活 |
created_by_id |
Integer | FK → admins.id, NOT NULL |
创建者 |
created_at |
DateTime | NOT NULL | 创建时间 |
关系: → invitations (一对多)
4. invitations - 邀请记录表
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
id |
Integer | PK | 主键 |
card_key_id |
Integer | FK → card_keys.id, NULLABLE, INDEX |
关联卡密 |
account_id |
Integer | FK → chatgpt_accounts.id, NOT NULL, INDEX |
关联账号 |
invited_email |
String(120) | NOT NULL, INDEX | 被邀请邮箱 |
status |
String(20) | NOT NULL, DEFAULT 'pending', INDEX | 状态 |
error_message |
Text | NULLABLE | 错误信息 |
expires_at |
DateTime | NULLABLE | 邀请过期时间 |
created_at |
DateTime | NOT NULL, INDEX | 创建时间 |
updated_at |
DateTime | NULLABLE | 更新时间 |
api_response |
Text | NULLABLE | API 响应 (JSON) |
状态值: pending / sent / accepted / failed / expired
5. api_keys - API 密钥表
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
id |
Integer | PK | 主键 |
key |
String(64) | UNIQUE, NOT NULL, INDEX | API Key (sk_live_xxx) |
name |
String(100) | NOT NULL | 名称 |
created_by_id |
Integer | FK → admins.id, NOT NULL |
创建者 |
is_active |
Boolean | NOT NULL, DEFAULT TRUE, INDEX | 是否激活 |
rate_limit |
Integer | NOT NULL, DEFAULT 60 | 速率限制 (次/分钟) |
allowed_ips |
Text | DEFAULT '[]' | IP 白名单 (JSON 数组) |
last_used |
DateTime | NULLABLE | 最后使用时间 |
request_count |
Integer | NOT NULL, DEFAULT 0 | 请求计数 |
created_at |
DateTime | NOT NULL | 创建时间 |
6. system_settings - 系统配置表
| 字段名 | 类型 | 约束 | 说明 |
|---|---|---|---|
id |
Integer | PK | 主键 |
key |
String(100) | UNIQUE, NOT NULL, INDEX | 配置键名 |
value |
Text | NOT NULL | 配置值 |
value_type |
String(20) | NOT NULL, DEFAULT 'string' | 值类型 (string/int/float/bool/json) |
description |
String(255) | NULLABLE | 配置描述 |
updated_at |
DateTime | NULLABLE | 更新时间 |
默认配置项:
| 键名 | 类型 | 默认值 | 说明 |
|---|---|---|---|
turnstile_enabled |
bool | false | Cloudflare Turnstile 开关 |
turnstile_site_key |
string | '' | Turnstile Site Key |
turnstile_secret_key |
string | '' | Turnstile Secret Key |
token_check_interval |
int | 6 | Token 检测间隔(小时) |
token_failure_threshold |
int | 2 | 连续失败禁用阈值 |
invitation_validity_days |
int | 30 | 邀请有效期(天) |
site_title |
string | 'ChatGPT Team 邀请' | 站点标题 |
ER 关系图
┌─────────────┐ ┌──────────────────┐ ┌─────────────┐
│ admins │ │ chatgpt_accounts │ │ card_keys │
├─────────────┤ ├──────────────────┤ ├─────────────┤
│ id (PK) │───┐ │ id (PK) │───┐ │ id (PK) │
│ username │ │ │ name │ │ │ key │
│ email │ │ │ auth_token │ │ │ max_uses │
│ password │ │ │ team_account_id │ │ │ expires_at │
└─────────────┘ │ └──────────────────┘ │ └─────────────┘
│ │ │ │ │
│ │ │ │ │
▼ │ ▼ │ ▼
┌─────────────┐ │ ┌──────────────────┐ │ │
│ api_keys │ │ │ invitations │◄──┴─────────┘
├─────────────┤ │ ├──────────────────┤
│ id (PK) │ │ │ id (PK) │
│ key │ │ │ account_id (FK) │
│created_by_id│◄──┘ │ card_key_id (FK) │
└─────────────┘ │ invited_email │
│ status │
└──────────────────┘
┌──────────────────┐
│ system_settings │
├──────────────────┤
│ id (PK) │
│ key │
│ value │
│ value_type │
└──────────────────┘