Files
skycurtain c7cc6f6dfd feat(db): payments 拆为 subscriptions 与 topups
订阅权益与充值入账分表;topups 对齐上游充值单(无 quota_granted),
paid_at=complete_time;quota_derived 查询层派生。
2026-10-09 22:02:10 +08:00

1054 lines
26 KiB
JSON

{
"id": "ab6e6c62-7131-480b-9b11-5a386e3c8863",
"prevId": "00000000-0000-0000-0000-000000000000",
"version": "7",
"dialect": "postgresql",
"tables": {
"public.api_keys": {
"name": "api_keys",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "always",
"name": "api_keys_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"key_hash": {
"name": "key_hash",
"type": "text",
"primaryKey": false,
"notNull": true
},
"key_ciphertext": {
"name": "key_ciphertext",
"type": "bytea",
"primaryKey": false,
"notNull": true
},
"status": {
"name": "status",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'active'"
},
"member_id": {
"name": "member_id",
"type": "bigint",
"primaryKey": false,
"notNull": false
},
"registered_at": {
"name": "registered_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"log_synced_at": {
"name": "log_synced_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"usage_synced_at": {
"name": "usage_synced_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"token_name": {
"name": "token_name",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "''"
},
"total_granted": {
"name": "total_granted",
"type": "bigint",
"primaryKey": false,
"notNull": true,
"default": 0
},
"total_used": {
"name": "total_used",
"type": "bigint",
"primaryKey": false,
"notNull": true,
"default": 0
},
"total_available": {
"name": "total_available",
"type": "bigint",
"primaryKey": false,
"notNull": true,
"default": 0
},
"unlimited_quota": {
"name": "unlimited_quota",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"model_limits": {
"name": "model_limits",
"type": "jsonb",
"primaryKey": false,
"notNull": false
},
"model_limits_enabled": {
"name": "model_limits_enabled",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"expires_at": {
"name": "expires_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
}
},
"indexes": {
"api_keys_member_id_idx": {
"name": "api_keys_member_id_idx",
"columns": [
{
"expression": "member_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"api_keys_member_id_members_id_fk": {
"name": "api_keys_member_id_members_id_fk",
"tableFrom": "api_keys",
"tableTo": "members",
"columnsFrom": [
"member_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"api_keys_key_hash_unique": {
"name": "api_keys_key_hash_unique",
"nullsNotDistinct": false,
"columns": [
"key_hash"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.audit_logs": {
"name": "audit_logs",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "always",
"name": "audit_logs_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
},
"operator": {
"name": "operator",
"type": "text",
"primaryKey": false,
"notNull": false
},
"domain": {
"name": "domain",
"type": "text",
"primaryKey": false,
"notNull": true
},
"action": {
"name": "action",
"type": "text",
"primaryKey": false,
"notNull": true
},
"summary": {
"name": "summary",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "''"
}
},
"indexes": {
"audit_logs_created_at_idx": {
"name": "audit_logs_created_at_idx",
"columns": [
{
"expression": "created_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.engine_status": {
"name": "engine_status",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "integer",
"primaryKey": true,
"notNull": true,
"default": 1
},
"running": {
"name": "running",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"sync_interval_ms": {
"name": "sync_interval_ms",
"type": "bigint",
"primaryKey": false,
"notNull": true,
"default": 300000
},
"last_round": {
"name": "last_round",
"type": "jsonb",
"primaryKey": false,
"notNull": false
},
"updated_at": {
"name": "updated_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.members": {
"name": "members",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "always",
"name": "members_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true
},
"remark": {
"name": "remark",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "''"
},
"status": {
"name": "status",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "'active'"
},
"token_hash": {
"name": "token_hash",
"type": "text",
"primaryKey": false,
"notNull": true
},
"token_issued_at": {
"name": "token_issued_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"members_name_unique": {
"name": "members_name_unique",
"nullsNotDistinct": false,
"columns": [
"name"
]
},
"members_token_hash_unique": {
"name": "members_token_hash_unique",
"nullsNotDistinct": false,
"columns": [
"token_hash"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.qpu_history": {
"name": "qpu_history",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "always",
"name": "qpu_history_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"qpu": {
"name": "qpu",
"type": "numeric(18, 6)",
"primaryKey": false,
"notNull": true
},
"effective_from": {
"name": "effective_from",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.sessions": {
"name": "sessions",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "always",
"name": "sessions_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"user_id": {
"name": "user_id",
"type": "bigint",
"primaryKey": false,
"notNull": true
},
"token_hash": {
"name": "token_hash",
"type": "text",
"primaryKey": false,
"notNull": true
},
"expires_at": {
"name": "expires_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"sessions_user_id_idx": {
"name": "sessions_user_id_idx",
"columns": [
{
"expression": "user_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"sessions_user_id_users_id_fk": {
"name": "sessions_user_id_users_id_fk",
"tableFrom": "sessions",
"tableTo": "users",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"sessions_token_hash_unique": {
"name": "sessions_token_hash_unique",
"nullsNotDistinct": false,
"columns": [
"token_hash"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.subscriptions": {
"name": "subscriptions",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "always",
"name": "subscriptions_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"subscription_id": {
"name": "subscription_id",
"type": "bigint",
"primaryKey": false,
"notNull": true
},
"period_start": {
"name": "period_start",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"period_end": {
"name": "period_end",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"quota_granted": {
"name": "quota_granted",
"type": "bigint",
"primaryKey": false,
"notNull": true
},
"paid_amount": {
"name": "paid_amount",
"type": "numeric(18, 2)",
"primaryKey": false,
"notNull": false
},
"paid_at": {
"name": "paid_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": false
},
"remark": {
"name": "remark",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "''"
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {
"subscriptions_period_idx": {
"name": "subscriptions_period_idx",
"columns": [
{
"expression": "period_start",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "period_end",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"subscriptions_subscription_id_unique": {
"name": "subscriptions_subscription_id_unique",
"nullsNotDistinct": false,
"columns": [
"subscription_id"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.topups": {
"name": "topups",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "always",
"name": "topups_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"upstream_id": {
"name": "upstream_id",
"type": "bigint",
"primaryKey": false,
"notNull": false
},
"amount": {
"name": "amount",
"type": "numeric(18, 6)",
"primaryKey": false,
"notNull": true
},
"money": {
"name": "money",
"type": "numeric(18, 2)",
"primaryKey": false,
"notNull": true
},
"trade_no": {
"name": "trade_no",
"type": "text",
"primaryKey": false,
"notNull": false
},
"payment_method": {
"name": "payment_method",
"type": "text",
"primaryKey": false,
"notNull": false
},
"payment_provider": {
"name": "payment_provider",
"type": "text",
"primaryKey": false,
"notNull": false
},
"status": {
"name": "status",
"type": "text",
"primaryKey": false,
"notNull": false
},
"paid_at": {
"name": "paid_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"remark": {
"name": "remark",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "''"
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.usage_logs": {
"name": "usage_logs",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "always",
"name": "usage_logs_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"api_key_id": {
"name": "api_key_id",
"type": "bigint",
"primaryKey": false,
"notNull": true
},
"dedupe_key": {
"name": "dedupe_key",
"type": "text",
"primaryKey": false,
"notNull": true
},
"billing_source": {
"name": "billing_source",
"type": "text",
"primaryKey": false,
"notNull": false
},
"subscription_id": {
"name": "subscription_id",
"type": "bigint",
"primaryKey": false,
"notNull": false
},
"user_id": {
"name": "user_id",
"type": "bigint",
"primaryKey": false,
"notNull": true,
"default": 0
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true
},
"type": {
"name": "type",
"type": "smallint",
"primaryKey": false,
"notNull": true,
"default": 2
},
"content": {
"name": "content",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "''"
},
"username": {
"name": "username",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "''"
},
"token_name": {
"name": "token_name",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "''"
},
"model_name": {
"name": "model_name",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "''"
},
"quota": {
"name": "quota",
"type": "bigint",
"primaryKey": false,
"notNull": true,
"default": 0
},
"prompt_tokens": {
"name": "prompt_tokens",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"completion_tokens": {
"name": "completion_tokens",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"use_time": {
"name": "use_time",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"is_stream": {
"name": "is_stream",
"type": "boolean",
"primaryKey": false,
"notNull": true,
"default": false
},
"channel": {
"name": "channel",
"type": "integer",
"primaryKey": false,
"notNull": true,
"default": 0
},
"channel_name": {
"name": "channel_name",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "''"
},
"token_id": {
"name": "token_id",
"type": "bigint",
"primaryKey": false,
"notNull": true,
"default": 0
},
"group_name": {
"name": "group_name",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "''"
},
"ip": {
"name": "ip",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "''"
},
"request_id": {
"name": "request_id",
"type": "text",
"primaryKey": false,
"notNull": true,
"default": "''"
},
"upstream_request_id": {
"name": "upstream_request_id",
"type": "text",
"primaryKey": false,
"notNull": false
},
"other": {
"name": "other",
"type": "jsonb",
"primaryKey": false,
"notNull": false
}
},
"indexes": {
"usage_logs_created_at_idx": {
"name": "usage_logs_created_at_idx",
"columns": [
{
"expression": "created_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"usage_logs_api_key_created_idx": {
"name": "usage_logs_api_key_created_idx",
"columns": [
{
"expression": "api_key_id",
"isExpression": false,
"asc": true,
"nulls": "last"
},
{
"expression": "created_at",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
},
"usage_logs_subscription_idx": {
"name": "usage_logs_subscription_idx",
"columns": [
{
"expression": "subscription_id",
"isExpression": false,
"asc": true,
"nulls": "last"
}
],
"isUnique": false,
"concurrently": false,
"method": "btree",
"with": {}
}
},
"foreignKeys": {
"usage_logs_api_key_id_api_keys_id_fk": {
"name": "usage_logs_api_key_id_api_keys_id_fk",
"tableFrom": "usage_logs",
"tableTo": "api_keys",
"columnsFrom": [
"api_key_id"
],
"columnsTo": [
"id"
],
"onDelete": "no action",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"usage_logs_dedupe_key_unique": {
"name": "usage_logs_dedupe_key_unique",
"nullsNotDistinct": false,
"columns": [
"dedupe_key"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
},
"public.users": {
"name": "users",
"schema": "",
"columns": {
"id": {
"name": "id",
"type": "bigint",
"primaryKey": true,
"notNull": true,
"identity": {
"type": "always",
"name": "users_id_seq",
"schema": "public",
"increment": "1",
"startWith": "1",
"minValue": "1",
"maxValue": "9223372036854775807",
"cache": "1",
"cycle": false
}
},
"username": {
"name": "username",
"type": "text",
"primaryKey": false,
"notNull": true
},
"password_hash": {
"name": "password_hash",
"type": "text",
"primaryKey": false,
"notNull": true
},
"created_at": {
"name": "created_at",
"type": "timestamp with time zone",
"primaryKey": false,
"notNull": true,
"default": "now()"
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {
"users_username_unique": {
"name": "users_username_unique",
"nullsNotDistinct": false,
"columns": [
"username"
]
}
},
"policies": {},
"checkConstraints": {},
"isRLSEnabled": false
}
},
"enums": {},
"schemas": {},
"sequences": {},
"roles": {},
"policies": {},
"views": {},
"_meta": {
"columns": {},
"schemas": {},
"tables": {}
}
}