数据库表
users
用户表。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | UUID | 自动生成 | 主键 |
| avatar_url | TEXT | 头像 URL | |
| first_name | VARCHAR(255) | 名 | |
| last_name | VARCHAR(255) | 姓 | |
| username | VARCHAR(255) | 用户名 | |
| password | TEXT | 密码(argon2 加密) | |
| role | VARCHAR(20) | member | 系统角色(owner / member) |
| status | VARCHAR(20) | active | 状态(active / disabled) |
| created_at | BIGINT | 当前时间戳 | 创建时间 |
| updated_at | BIGINT | 当前时间戳 | 更新时间 |
| deleted_at | BIGINT | NULL | 软删除时间 |
user_emails
用户邮箱表,支持多邮箱。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | UUID | 自动生成 | 主键 |
| user_id | UUID | 用户 ID | |
| TEXT | 邮箱 | ||
| is_primary | BOOLEAN | false | 是否主邮箱 |
| verified | BOOLEAN | false | 是否已验证 |
| via | VARCHAR(80) | email:password | 注册来源(email:password / google) |
| created_at | BIGINT | 当前时间戳 | 创建时间 |
| updated_at | BIGINT | 当前时间戳 | 更新时间 |
唯一约束:(user_id, email)、(user_id, is_primary)
user_provider_customers
第三方支付客户 ID 映射。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | UUID | 自动生成 | 主键 |
| user_id | UUID | 用户 ID | |
| user_email_id | UUID | 用户邮箱 ID | |
| provider | VARCHAR(50) | 支付提供商(stripe) | |
| customer_id | VARCHAR(255) | 提供商客户 ID | |
| created_at | BIGINT | 当前时间戳 | 创建时间 |
唯一约束:(user_id, provider)
user_email_preferences
邮件订阅偏好。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | UUID | 自动生成 | 主键 |
| user_id | UUID | 用户 ID | |
| email_type | VARCHAR(50) | 邮件类型(marketing / product_updates / payment_receipts) | |
| subscribed | BOOLEAN | true | 是否订阅 |
| created_at | BIGINT | 当前时间戳 | 创建时间 |
| updated_at | BIGINT | 当前时间戳 | 更新时间 |
唯一约束:(user_id, email_type)
tenants
租户(组织)表。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | UUID | 自动生成 | 主键 |
| name | VARCHAR(255) | 组织名称 | |
| slug | VARCHAR(255) | URL 标识(唯一) | |
| logo_url | TEXT | Logo | |
| owner_id | UUID | 创建者 ID | |
| is_default | BOOLEAN | false | 是否默认组织 |
| deleted_at | BIGINT | 软删除时间 | |
| created_at | BIGINT | 当前时间戳 | 创建时间 |
| updated_at | BIGINT | 当前时间戳 | 更新时间 |
tenant_members
租户成员关系表。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | UUID | 自动生成 | 主键 |
| tenant_id | UUID | 组织 ID | |
| user_id | UUID | 用户 ID | |
| role | VARCHAR(20) | member | 角色(owner / member / 自定义) |
| created_at | BIGINT | 当前时间戳 | 加入时间 |
| updated_at | BIGINT | 当前时间戳 | 更新时间 |
唯一约束:(tenant_id, user_id)
tenant_invitations
租户邀请表。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | UUID | 自动生成 | 主键 |
| tenant_id | UUID | 组织 ID | |
| VARCHAR(255) | 被邀请邮箱 | ||
| role | VARCHAR(20) | member | 分配角色 |
| invited_by | UUID | 邀请人 ID | |
| token | VARCHAR(255) | 邀请令牌(唯一) | |
| status | VARCHAR(20) | pending | 状态(pending / accepted) |
| credit_limit | INTEGER | -1 | 积分限额(-1 = 无限) |
| expires_at | BIGINT | 过期时间 | |
| created_at | BIGINT | 当前时间戳 | 创建时间 |
唯一约束:(tenant_id, email)
tenant_member_credit_limits
成员积分限额表。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | UUID | 自动生成 | 主键 |
| tenant_id | UUID | 组织 ID | |
| user_id | UUID | 成员 ID | |
| credit_limit | INTEGER | -1 | 积分限额(-1 = 无限) |
| used_credits | INTEGER | 0 | 已使用积分 |
| created_at | BIGINT | 当前时间戳 | 创建时间 |
| updated_at | BIGINT | 当前时间戳 | 更新时间 |
唯一约束:(tenant_id, user_id)
subscriptions
订阅表。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | UUID | 自动生成 | 主键 |
| provider | VARCHAR(50) | stripe | 支付提供商 |
| user_id | UUID | 用户 ID | |
| tenant_id | UUID | 组织 ID | |
| plan_id | VARCHAR(255) | 方案 ID | |
| status | VARCHAR(20) | pending | 状态(active / pending / canceled / past_due) |
| amount | INTEGER | 金额(分) | |
| currency | VARCHAR(10) | usd | 货币 |
| provider_subscription_id | VARCHAR(255) | Stripe 订阅 ID(唯一) | |
| provider_customer_id | VARCHAR(255) | Stripe 客户 ID | |
| provider_price_id | VARCHAR(255) | Stripe 价格 ID | |
| current_period_start | BIGINT | 当前周期开始 | |
| current_period_end | BIGINT | 当前周期结束 | |
| canceled_at | BIGINT | NULL | 取消时间 |
| raw_data | JSONB | Stripe 原始数据 | |
| created_at | BIGINT | 当前时间戳 | 创建时间 |
| updated_at | BIGINT | 当前时间戳 | 更新时间 |
credits
积分表。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | UUID | 自动生成 | 主键 |
| provider | VARCHAR(50) | stripe | 支付提供商 |
| user_id | UUID | 用户 ID | |
| tenant_id | UUID | 组织 ID | |
| plan_id | VARCHAR(255) | 方案 ID | |
| mode | VARCHAR(100) | 获取方式(free / subscription / one_time:credits) | |
| total_credits | BIGINT | 总积分 | |
| remaining_credits | BIGINT | 剩余积分 | |
| amount | INTEGER | 0 | 金额(分) |
| currency | VARCHAR(10) | usd | 货币 |
| priority | INTEGER | 50 | 消耗优先级(越大越先用) |
| source_type | VARCHAR(100) | 事件类型(checkout.session.completed 等) | |
| source_id | VARCHAR(255) | 事件 ID | |
| provider_price_id | VARCHAR(255) | Stripe 价格 ID | |
| provider_customer_id | VARCHAR(255) | Stripe 客户 ID | |
| expires_at | BIGINT | NULL | 过期时间(NULL = 永不过期) |
| effective_at | BIGINT | 生效时间 | |
| raw_data | JSONB | Stripe 原始数据 | |
| created_at | BIGINT | 当前时间戳 | 创建时间 |
唯一约束:(user_id, source_id)
credit_transactions
积分交易记录。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | UUID | 自动生成 | 主键 |
| user_id | UUID | 用户 ID | |
| tenant_id | UUID | 组织 ID | |
| credit_id | UUID | 积分包 ID | |
| credits | INTEGER | 积分数量 | |
| type | VARCHAR(50) | 类型(add:purchase / deduct / deduct:overdraft) | |
| description | TEXT | 描述 | |
| created_at | BIGINT | 当前时间戳 | 时间 |
credit_overdrafts
积分透支记录。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | UUID | 自动生成 | 主键 |
| user_id | UUID | 透支用户 ID | |
| tenant_id | UUID | 组织 ID | |
| credits | BIGINT | 透支积分数 | |
| created_at | BIGINT | 当前时间戳 | 创建时间 |
| updated_at | BIGINT | 当前时间戳 | 更新时间 |
lifetime
终身买断表。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | UUID | 自动生成 | 主键 |
| provider | VARCHAR(50) | stripe | 支付提供商 |
| user_id | UUID | 用户 ID | |
| tenant_id | UUID | 组织 ID | |
| plan_id | VARCHAR(255) | 方案 ID | |
| amount | INTEGER | 金额(分) | |
| currency | VARCHAR(10) | usd | 货币 |
| provider_price_id | VARCHAR(255) | Stripe 价格 ID | |
| provider_customer_id | VARCHAR(255) | Stripe 客户 ID | |
| provider_payment_intent_id | VARCHAR(255) | Stripe PaymentIntent ID | |
| provider_checkout_session_id | VARCHAR(255) | Stripe Session ID(唯一) | |
| raw_data | JSONB | Stripe 原始数据 | |
| created_at | BIGINT | 当前时间戳 | 创建时间 |
invoices
发票表。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | UUID | 自动生成 | 主键 |
| provider | VARCHAR(50) | stripe | 支付提供商 |
| user_id | UUID | 用户 ID | |
| tenant_id | UUID | 组织 ID | |
| plan_id | VARCHAR(255) | 方案 ID | |
| amount | INTEGER | 金额(分) | |
| currency | VARCHAR(10) | usd | 货币 |
| billing_reason | VARCHAR(50) | 原因(subscription_create / subscription_cycle / manual) | |
| provider_invoice_id | VARCHAR(255) | Stripe 发票 ID(唯一) | |
| provider_price_id | VARCHAR(255) | Stripe 价格 ID | |
| provider_customer_id | VARCHAR(255) | Stripe 客户 ID | |
| invoice_pdf | TEXT | 发票 PDF 链接 | |
| receipt_pdf | TEXT | 收据 PDF 链接 | |
| hosted_invoice_url | TEXT | 在线查看链接 | |
| raw_data | JSONB | Stripe 原始数据 | |
| paid_at | BIGINT | 支付时间 |
prices
价格表(同步自 Stripe)。
| 字段 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | UUID | 自动生成 | 主键 |
| provider | VARCHAR(50) | stripe | 支付提供商 |
| provider_price_id | VARCHAR(255) | Stripe Price ID | |
| product_id | VARCHAR(255) | Stripe Product ID | |
| active | BOOLEAN | true | 是否启用 |
| currency | VARCHAR(3) | 货币 | |
| unit_amount | INTEGER | 单价(分) | |
| billing_scheme | VARCHAR(50) | 计费方式(per_unit) | |
| type | VARCHAR(50) | 类型(recurring / one_time) | |
| interval | VARCHAR(20) | 周期(month / year) | |
| interval_count | INTEGER | 周期数量 | |
| trial_period_days | INTEGER | 试用天数 | |
| usage_type | VARCHAR(50) | 使用类型(licensed / metered) | |
| metadata | JSONB | 元数据 | |
| raw_data | JSONB | Stripe 原始数据 | |
| created_at | TIMESTAMP | NOW() | 创建时间 |
| updated_at | TIMESTAMP | NOW() | 更新时间 |
唯一约束:(provider, provider_price_id)