# New-API 数据库表结构文档 本文档记录了 New-API 项目中所有数据库表及其字段的详细说明。 --- ## 目录 1. [users - 用户表](#1-users---用户表) 2. [tokens - 令牌表](#2-tokens---令牌表) 3. [channels - 渠道表](#3-channels---渠道表) 4. [logs - 日志表](#4-logs---日志表) 5. [options - 系统配置表](#5-options---系统配置表) 6. [redemptions - 兑换码表](#6-redemptions---兑换码表) 7. [top_ups - 充值记录表](#7-top_ups---充值记录表) 8. [tasks - 异步任务表](#8-tasks---异步任务表) 9. [midjourneys - Midjourney任务表](#9-midjourneys---midjourney任务表) 10. [abilities - 渠道能力表](#10-abilities---渠道能力表) 11. [setups - 系统初始化表](#11-setups---系统初始化表) 12. [two_fas - 双因素认证表](#12-two_fas---双因素认证表) 13. [two_fa_backup_codes - 2FA备用码表](#13-two_fa_backup_codes---2fa备用码表) 14. [checkins - 签到记录表](#14-checkins---签到记录表) 15. [passkey_credentials - Passkey凭证表](#15-passkey_credentials---passkey凭证表) 16. [quota_data - 额度数据统计表](#16-quota_data---额度数据统计表) 17. [subscription_plans - 订阅计划表](#17-subscription_plans---订阅计划表) 18. [subscription_orders - 订阅订单表](#18-subscription_orders---订阅订单表) 19. [user_subscriptions - 用户订阅表](#19-user_subscriptions---用户订阅表) 20. [subscription_pre_consume_records - 订阅预消费记录表](#20-subscription_pre_consume_records---订阅预消费记录表) 21. [custom_oauth_providers - 自定义OAuth提供商表](#21-custom_oauth_providers---自定义oauth提供商表) 22. [user_oauth_bindings - 用户OAuth绑定表](#22-user_oauth_bindings---用户oauth绑定表) 23. [vendors - 供应商表](#23-vendors---供应商表) 24. [models - 模型元数据表](#24-models---模型元数据表) 25. [prefill_groups - 预填充组表](#25-prefill_groups---预填充组表) 26. [channel_pricings - 渠道定价表](#26-channel_pricings---渠道定价表) 27. [pricing_tags - 定价标签表](#27-pricing_tags---定价标签表) 28. [表关系图](#表关系图) --- ## 1. users - 用户表 存储系统用户信息。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | username | string | 用户名,唯一索引 | | password | string | 密码(哈希存储) | | display_name | string | 显示名称 | | role | int | 角色:1=普通用户,10=管理员,100=超级管理员 | | status | int | 状态:1=启用 | | email | string | 邮箱 | | github_id | string | GitHub OAuth ID | | discord_id | string | Discord OAuth ID | | oidc_id | string | OIDC OAuth ID | | wechat_id | string | 微信 OAuth ID | | telegram_id | string | Telegram OAuth ID | | access_token | *string | 系统管理访问令牌(32字符,唯一) | | quota | int | 用户配额/额度 | | used_quota | int | 已使用的配额 | | request_count | int | 请求次数 | | group | string | 用户分组(默认 'default') | | aff_code | string | 邀请码(唯一) | | aff_count | int | 邀请人数 | | aff_quota | int | 邀请剩余额度 | | aff_history_quota | int | 邀请历史总额度 | | inviter_id | int | 邀请人ID | | linux_do_id | string | LinuxDO OAuth ID | | setting | string | 用户设置(JSON格式) | | remark | string | 备注 | | stripe_customer | string | Stripe客户ID | | deleted_at | gorm.DeletedAt | 软删除时间 | --- ## 2. tokens - 令牌表 存储用户的 API 令牌。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | user_id | int | 用户ID(索引) | | key | string | 令牌密钥(48字符,唯一) | | status | int | 状态:1=启用 | | name | string | 令牌名称 | | created_time | int64 | 创建时间(Unix时间戳) | | accessed_time | int64 | 最后访问时间 | | expired_time | int64 | 过期时间(-1表示永不过期) | | remain_quota | int | 剩余额度 | | unlimited_quota | bool | 是否无限额度 | | model_limits_enabled | bool | 是否启用模型限制 | | model_limits | string | 模型限制列表(逗号分隔) | | allow_ips | *string | 允许的IP列表 | | used_quota | int | 已使用额度 | | group | string | 令牌分组 | | cross_group_retry | bool | 跨分组重试 | | bound_channel_id | int | 绑定的渠道ID(指定令牌只能使用该渠道) | | deleted_at | gorm.DeletedAt | 软删除时间 | --- ## 3. channels - 渠道表 存储 API 服务商渠道配置。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | type | int | 渠道类型(OpenAI=1, Azure=2等) | | key | string | API密钥 | | openai_organization | *string | OpenAI组织ID | | test_model | *string | 测试模型 | | status | int | 状态:1=启用 | | name | string | 渠道名称 | | weight | *uint | 权重(负载均衡用) | | created_time | int64 | 创建时间 | | test_time | int64 | 最后测试时间 | | response_time | int | 响应时间(毫秒) | | base_url | *string | 基础URL | | other | string | 其他信息 | | balance | float64 | 余额(美元) | | balance_updated_time | int64 | 余额更新时间 | | models | string | 支持的模型列表 | | group | string | 渠道分组 | | used_quota | int64 | 已使用额度 | | model_mapping | *string | 模型映射(JSON) | | status_code_mapping | *string | 状态码映射 | | priority | *int64 | 优先级 | | auto_ban | *int | 是否自动封禁 | | other_info | string | 其他信息(JSON) | | tag | *string | 标签 | | setting | *string | 渠道额外设置(JSON) | | param_override | *string | 参数覆盖(JSON) | | header_override | *string | 请求头覆盖(JSON) | | remark | *string | 备注 | | channel_info | ChannelInfo | 渠道信息(JSON,多Key模式配置) | | settings | string | 其他设置 | --- ## 4. logs - 日志表 记录用户请求日志和系统日志。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | user_id | int | 用户ID(索引) | | created_at | int64 | 创建时间(Unix时间戳) | | type | int | 日志类型:0=未知,1=充值,2=消费,3=管理,4=系统,5=错误,6=退款 | | content | string | 日志内容 | | username | string | 用户名 | | token_name | string | 令牌名称 | | model_name | string | 模型名称 | | quota | int | 消耗额度 | | prompt_tokens | int | 提示词Token数 | | completion_tokens | int | 完成Token数 | | use_time | int | 使用时间 | | is_stream | bool | 是否流式请求 | | channel_id | int | 渠道ID(索引) | | token_id | int | 令牌ID(索引) | | group | string | 分组 | | ip | string | 请求IP | | request_id | string | 请求ID(唯一) | | other | string | 其他信息(JSON) | --- ## 5. options - 系统配置表 存储系统级配置项。 | 字段名 | 类型 | 说明 | |--------|------|------| | key | string | 配置键(主键) | | value | string | 配置值 | --- ## 6. redemptions - 兑换码表 存储额度兑换码。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | user_id | int | 创建者用户ID | | key | string | 兑换码(32字符,唯一) | | status | int | 状态:1=启用,2=已使用,3=已禁用 | | name | string | 兑换码名称 | | quota | int | 额度值 | | created_time | int64 | 创建时间 | | redeemed_time | int64 | 兑换时间 | | used_user_id | int | 使用者用户ID | | expired_time | int64 | 过期时间(0=永不过期) | | deleted_at | gorm.DeletedAt | 软删除时间 | --- ## 7. top_ups - 充值记录表 记录用户充值订单。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | user_id | int | 用户ID(索引) | | amount | int64 | 充值额度 | | money | float64 | 支付金额 | | trade_no | string | 交易号(唯一,索引) | | payment_method | string | 支付方式 | | create_time | int64 | 创建时间 | | complete_time | int64 | 完成时间 | | status | string | 状态:pending/success/failed | --- ## 8. tasks - 异步任务表 存储异步任务(如视频生成等)。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int64 | 主键,自增ID | | created_at | int64 | 创建时间(索引) | | updated_at | int64 | 更新时间 | | task_id | string | 任务ID(对外暴露,索引) | | platform | string | 平台类型(索引) | | user_id | int | 用户ID(索引) | | group | string | 分组 | | channel_id | int | 渠道ID(索引) | | quota | int | 消耗额度 | | action | string | 任务类型(索引) | | status | string | 任务状态(索引) | | fail_reason | string | 失败原因 | | submit_time | int64 | 提交时间(索引) | | start_time | int64 | 开始时间(索引) | | finish_time | int64 | 完成时间(索引) | | progress | string | 进度(索引) | | properties | json | 任务属性 | | private_data | json | 私有数据(含Key、计费上下文等) | | data | json | 任务数据 | --- ## 9. midjourneys - Midjourney任务表 存储 Midjourney 图片生成任务。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | code | int | 响应码 | | user_id | int | 用户ID(索引) | | action | string | 动作类型(索引) | | mj_id | string | Midjourney ID(索引) | | prompt | string | 提示词 | | prompt_en | string | 英文提示词 | | description | string | 描述 | | state | string | 状态 | | submit_time | int64 | 提交时间(索引) | | start_time | int64 | 开始时间(索引) | | finish_time | int64 | 完成时间(索引) | | image_url | string | 图片URL | | video_url | string | 视频URL | | video_urls | string | 多个视频URL | | status | string | 状态(索引) | | progress | string | 进度(索引) | | fail_reason | string | 失败原因 | | channel_id | int | 渠道ID | | quota | int | 消耗额度 | | buttons | string | 操作按钮(JSON) | | properties | string | 属性(JSON) | --- ## 10. abilities - 渠道能力表 记录各渠道对不同模型的支持能力。 | 字段名 | 类型 | 说明 | |--------|------|------| | group | string | 分组(主键之一) | | model | string | 模型名称(主键之一) | | channel_id | int | 渠道ID(主键之一,索引) | | enabled | bool | 是否启用 | | priority | *int64 | 优先级(索引) | | weight | uint | 权重(索引) | | tag | *string | 标签(索引) | --- ## 11. setups - 系统初始化表 记录系统初始化状态。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | uint | 主键 | | version | string | 系统版本号 | | initialized_at | int64 | 初始化时间 | --- ## 12. two_fas - 双因素认证表 存储用户的双因素认证设置。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | user_id | int | 用户ID(唯一,索引) | | secret | string | TOTP密钥 | | is_enabled | bool | 是否启用 | | failed_attempts | int | 失败尝试次数 | | locked_until | *time.Time | 锁定截止时间 | | last_used_at | *time.Time | 最后使用时间 | | created_at | time.Time | 创建时间 | | updated_at | time.Time | 更新时间 | | deleted_at | gorm.DeletedAt | 软删除时间 | --- ## 13. two_fa_backup_codes - 2FA备用码表 存储双因素认证的备用恢复码。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | user_id | int | 用户ID(索引) | | code_hash | string | 备用码哈希 | | is_used | bool | 是否已使用 | | used_at | *time.Time | 使用时间 | | created_at | time.Time | 创建时间 | | deleted_at | gorm.DeletedAt | 软删除时间 | --- ## 14. checkins - 签到记录表 记录用户每日签到。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | user_id | int | 用户ID(联合唯一索引) | | checkin_date | string | 签到日期 YYYY-MM-DD(联合唯一索引) | | quota_awarded | int | 奖励额度 | | created_at | int64 | 创建时间 | --- ## 15. passkey_credentials - Passkey凭证表 存储用户的 Passkey/WebAuthn 凭证。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | user_id | int | 用户ID(唯一索引) | | credential_id | string | 凭证ID(base64,唯一) | | public_key | string | 公钥(base64) | | attestation_type | string | 证明类型 | | aaguid | string | AAGUID(base64) | | sign_count | uint32 | 签名计数 | | clone_warning | bool | 克隆警告 | | user_present | bool | 用户在场标志 | | user_verified | bool | 用户已验证标志 | | backup_eligible | bool | 备份资格 | | backup_state | bool | 备份状态 | | transports | string | 传输方式(JSON) | | attachment | string | 附件类型 | | last_used_at | *time.Time | 最后使用时间 | | created_at | time.Time | 创建时间 | | updated_at | time.Time | 更新时间 | | deleted_at | gorm.DeletedAt | 软删除时间 | --- ## 16. quota_data - 额度数据统计表 用于统计分析用户的额度使用情况。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | user_id | int | 用户ID(索引) | | username | string | 用户名 | | model_name | string | 模型名称 | | created_at | int64 | 创建时间(Unix时间戳) | | token_used | int | Token使用量 | | count | int | 请求次数 | | quota | int | 消耗额度 | --- ## 17. subscription_plans - 订阅计划表 存储可购买的订阅套餐。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | title | string | 套餐标题 | | subtitle | string | 副标题 | | price_amount | float64 | 价格金额 | | currency | string | 货币(默认USD) | | duration_unit | string | 时长单位:year/month/day/hour/custom | | duration_value | int | 时长数值 | | custom_seconds | int64 | 自定义秒数 | | enabled | bool | 是否启用 | | sort_order | int | 排序顺序 | | stripe_price_id | string | Stripe价格ID | | creem_product_id | string | Creem产品ID | | max_purchase_per_user | int | 每用户最大购买次数 | | upgrade_group | string | 升级到的用户组 | | total_amount | int64 | 总额度 | | quota_reset_period | string | 额度重置周期 | | quota_reset_custom_seconds | int64 | 自定义重置秒数 | | created_at | int64 | 创建时间 | | updated_at | int64 | 更新时间 | --- ## 18. subscription_orders - 订阅订单表 记录订阅购买订单。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | user_id | int | 用户ID(索引) | | plan_id | int | 计划ID(索引) | | money | float64 | 支付金额 | | trade_no | string | 交易号(唯一,索引) | | payment_method | string | 支付方式 | | status | string | 状态 | | create_time | int64 | 创建时间 | | complete_time | int64 | 完成时间 | | provider_payload | string | 支付提供商数据 | --- ## 19. user_subscriptions - 用户订阅表 记录用户购买的订阅。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | user_id | int | 用户ID(索引) | | plan_id | int | 计划ID(索引) | | amount_total | int64 | 总额度 | | amount_used | int64 | 已使用额度 | | start_time | int64 | 开始时间 | | end_time | int64 | 结束时间(索引) | | status | string | 状态 | | source | string | 来源:order/admin | | last_reset_time | int64 | 上次重置时间 | | next_reset_time | int64 | 下次重置时间(索引) | | upgrade_group | string | 升级到的分组 | | prev_user_group | string | 之前用户分组 | | created_at | int64 | 创建时间 | | updated_at | int64 | 更新时间 | --- ## 20. subscription_pre_consume_records - 订阅预消费记录表 记录订阅的预消费额度,用于流式请求的额度控制。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | request_id | string | 请求ID(唯一索引) | | user_id | int | 用户ID(索引) | | user_subscription_id | int | 用户订阅ID(索引) | | pre_consumed | int64 | 预消费额度 | | status | string | 状态:consumed/refunded | | created_at | int64 | 创建时间 | | updated_at | int64 | 更新时间(索引) | --- ## 21. custom_oauth_providers - 自定义OAuth提供商表 存储自定义的 OAuth 登录提供商配置。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | name | string | 显示名称 | | slug | string | URL标识符(唯一) | | icon | string | 图标名称 | | enabled | bool | 是否启用 | | client_id | string | OAuth客户端ID | | client_secret | string | OAuth客户端密钥 | | authorization_endpoint | string | 授权URL | | token_endpoint | string | Token交换URL | | user_info_endpoint | string | 用户信息URL | | scopes | string | OAuth权限范围 | | user_id_field | string | 用户ID字段路径 | | username_field | string | 用户名字段路径 | | display_name_field | string | 显示名称字段路径 | | email_field | string | 邮箱字段路径 | | well_known | string | OIDC发现端点 | | auth_style | int | 认证样式 | | access_policy | string | 访问控制策略(JSON) | | access_denied_message | string | 访问拒绝消息 | | created_at | time.Time | 创建时间 | | updated_at | time.Time | 更新时间 | --- ## 22. user_oauth_bindings - 用户OAuth绑定表 记录用户与第三方 OAuth 账号的绑定关系。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | user_id | int | 用户ID(索引) | | provider_id | int | 提供商ID(索引) | | provider_user_id | string | 提供商用户ID(索引) | | created_at | time.Time | 创建时间 | | updated_at | time.Time | 更新时间 | | deleted_at | gorm.DeletedAt | 软删除时间 | --- ## 23. vendors - 供应商表 存储 AI 模型供应商信息。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | name | string | 供应商名称 | | description | string | 描述 | | icon | string | 图标 | | status | int | 状态:1=启用,0=禁用 | | created_time | int64 | 创建时间 | | updated_time | int64 | 更新时间 | | deleted_at | gorm.DeletedAt | 软删除时间 | --- ## 24. models - 模型元数据表 存储 AI 模型的元数据信息(**注意:不存储价格,价格在 channel_pricings 表或全局配置中**)。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | model_name | string | 模型名称 | | description | string | 描述 | | icon | string | 图标 | | tags | string | 标签 | | type | int | 模型类型:1=Chat, 2=Image, 3=Audio, 4=Video, 5=Embedding, 6=Rerank, 7=Vision, 8=Other | | vendor_id | int | 供应商ID | | endpoints | string | 支持的端点(JSON) | | status | int | 状态:1=启用,0=禁用 | | sync_official | int | 是否同步官方 | | name_rule | int | 名称匹配规则:0=精确匹配,1=前缀匹配,2=包含匹配,3=后缀匹配 | | created_time | int64 | 创建时间 | | updated_time | int64 | 更新时间 | | deleted_at | gorm.DeletedAt | 软删除时间 | --- ## 25. prefill_groups - 预填充组表 存储预设的提示词/内容组。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | name | string | 组名称(唯一,索引) | | type | string | 组类型(索引) | | items | json | 组项目列表 | | description | string | 描述 | | created_time | int64 | 创建时间 | | updated_time | int64 | 更新时间 | | deleted_at | gorm.DeletedAt | 软删除时间 | --- ## 26. channel_pricings - 渠道定价表 存储各渠道的模型定价配置。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | model_name | string | 模型名称(联合唯一索引) | | channel_id | int | 渠道ID(联合唯一索引,索引) | | quota_type | int | 计费类型:0=按Token,1=按次 | | model_ratio | float64 | 模型倍率 | | completion_ratio | float64 | 完成倍率 | | model_price | float64 | 模型价格 | | tag_ids | string | 关联的定价标签ID列表(逗号分隔) | | created_time | int64 | 创建时间(Unix时间戳) | | updated_time | int64 | 更新时间(Unix时间戳) | | deleted_at | gorm.DeletedAt | 软删除时间 | --- ## 27. pricing_tags - 定价标签表 存储定价分类标签。 | 字段名 | 类型 | 说明 | |--------|------|------| | id | int | 主键,自增ID | | name | string | 标签名称(唯一) | | color | string | 颜色(默认#1890ff) | | description | string | 描述 | | sort_order | int | 排序顺序 | | created_time | int64 | 创建时间 | | deleted_at | gorm.DeletedAt | 软删除时间 | --- ## 表关系图 ### 核心关系 ``` ┌─────────────┐ ┌─────────────┐ │ users │───1:N─│ tokens │ └─────────────┘ └─────────────┘ │ │ 1:N ▼ ┌─────────────┐ ┌─────────────┐ │ logs │ │ top_ups │ └─────────────┘ └─────────────┘ ┌─────────────┐ ┌─────────────┐ │ channels │───1:N─│ abilities │ └─────────────┘ └─────────────┘ │ │ 1:N ▼ ┌──────────────────┐ │ channel_pricings │ └──────────────────┘ ``` ### 订阅系统关系 ``` ┌───────────────────┐ │ subscription_plans│ └─────────┬─────────┘ │ ┌─────┴─────┐ │ 1:N │ 1:N ▼ ▼ ┌───────────────┐ ┌──────────────────┐ │subscription_ │ │ user_subscriptions│ │ orders │ └───────────────────┘ └───────────────┘ │ │ 1:N ▼ ┌──────────────────────────┐ │ subscription_pre_consume │ │ _records │ └──────────────────────────┘ ``` ### OAuth 系统关系 ``` ┌────────────────────────┐ │ custom_oauth_providers │ └───────────┬────────────┘ │ 1:N ▼ ┌───────────────────────┐ ┌─────────────┐ │ user_oauth_bindings │─────│ users │ └───────────────────────┘ └─────────────┘ ``` ### 模型元数据关系 ``` ┌─────────────┐ ┌─────────────┐ │ vendors │───1:N─│ models │ └─────────────┘ └─────────────┘ ``` --- ## 完整关系列表 | 主表 | 从表 | 关系 | 说明 | |------|------|------|------| | users | tokens | 1:N | 一个用户可有多个令牌 | | users | logs | 1:N | 一个用户可有多条日志 | | users | top_ups | 1:N | 一个用户可有多条充值记录 | | users | redemptions | 1:N | 一个用户创建的兑换码 | | users | tasks | 1:N | 一个用户可有多个任务 | | users | midjourneys | 1:N | 一个用户可有多个MJ任务 | | users | checkins | 1:N | 一个用户可有多条签到记录 | | users | two_fas | 1:1 | 一个用户可有一个2FA设置 | | users | passkey_credentials | 1:1 | 一个用户可有一个Passkey | | users | user_subscriptions | 1:N | 一个用户可有多个订阅 | | users | user_oauth_bindings | 1:N | 一个用户可绑定多个OAuth | | channels | abilities | 1:N | 一个渠道可有多个能力记录 | | channels | channel_pricings | 1:N | 一个渠道可有多个模型定价 | | channels | tokens | 1:N | 一个渠道可被多个令牌绑定(可选,通过 bound_channel_id) | | subscription_plans | subscription_orders | 1:N | 一个计划可有多个订单 | | subscription_plans | user_subscriptions | 1:N | 一个计划可有多个用户订阅 | | custom_oauth_providers | user_oauth_bindings | 1:N | 一个提供商可有多个绑定 | | vendors | models | 1:N | 一个供应商可有多个模型 | | pricing_tags | channel_pricings | N:M | 定价标签与渠道定价多对多(通过 tag_ids) |