Files
api-worker/apps/worker/src/db/schema.sql
T
2026-03-18 01:20:30 +08:00

122 lines
3.4 KiB
SQL

CREATE TABLE IF NOT EXISTS channels (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
base_url TEXT NOT NULL,
api_key TEXT NOT NULL,
type INTEGER NOT NULL DEFAULT 1,
group_name TEXT,
priority INTEGER NOT NULL DEFAULT 0,
weight INTEGER NOT NULL DEFAULT 1,
status TEXT NOT NULL DEFAULT 'active',
rate_limit INTEGER DEFAULT 0,
models_json TEXT,
metadata_json TEXT,
test_time INTEGER,
response_time_ms INTEGER,
system_token TEXT,
system_userid TEXT,
checkin_enabled INTEGER NOT NULL DEFAULT 0,
checkin_url TEXT,
last_checkin_date TEXT,
last_checkin_status TEXT,
last_checkin_message TEXT,
last_checkin_at TEXT,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS channel_call_tokens (
id TEXT PRIMARY KEY,
channel_id TEXT NOT NULL,
name TEXT NOT NULL,
api_key TEXT NOT NULL,
models_json TEXT,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_channel_call_tokens_channel_id
ON channel_call_tokens (channel_id, created_at);
CREATE TABLE IF NOT EXISTS tokens (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
key_hash TEXT NOT NULL,
key_prefix TEXT NOT NULL,
token_plain TEXT,
quota_total INTEGER,
quota_used INTEGER NOT NULL DEFAULT 0,
status TEXT NOT NULL DEFAULT 'active',
allowed_channels TEXT,
expires_at TEXT,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL
);
CREATE UNIQUE INDEX IF NOT EXISTS idx_tokens_key_hash ON tokens (key_hash);
CREATE TABLE IF NOT EXISTS usage_logs (
id TEXT PRIMARY KEY,
token_id TEXT,
channel_id TEXT,
model TEXT,
request_path TEXT,
total_tokens INTEGER,
prompt_tokens INTEGER,
completion_tokens INTEGER,
cost REAL,
latency_ms INTEGER,
first_token_latency_ms INTEGER,
stream INTEGER,
reasoning_effort TEXT,
status TEXT,
upstream_status INTEGER,
error_code TEXT,
error_message TEXT,
created_at TEXT NOT NULL
);
CREATE INDEX IF NOT EXISTS idx_usage_logs_created_at ON usage_logs (created_at);
CREATE INDEX IF NOT EXISTS idx_usage_logs_channel_id ON usage_logs (channel_id);
CREATE INDEX IF NOT EXISTS idx_usage_logs_token_id ON usage_logs (token_id);
CREATE INDEX IF NOT EXISTS idx_usage_logs_model ON usage_logs (model);
CREATE INDEX IF NOT EXISTS idx_usage_logs_status ON usage_logs (status);
CREATE INDEX IF NOT EXISTS idx_usage_logs_upstream_status ON usage_logs (upstream_status);
CREATE TABLE IF NOT EXISTS settings (
key TEXT PRIMARY KEY,
value TEXT NOT NULL,
updated_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS admin_sessions (
id TEXT PRIMARY KEY,
token_hash TEXT NOT NULL,
expires_at TEXT NOT NULL,
created_at TEXT NOT NULL
);
CREATE TABLE IF NOT EXISTS channel_model_capabilities (
channel_id TEXT NOT NULL,
model TEXT NOT NULL,
last_ok_at INTEGER NOT NULL,
last_err_at INTEGER,
last_err_code TEXT,
last_err_count INTEGER NOT NULL DEFAULT 0,
created_at TEXT NOT NULL,
updated_at TEXT NOT NULL,
PRIMARY KEY (channel_id, model)
);
CREATE INDEX IF NOT EXISTS idx_channel_model_capabilities_model
ON channel_model_capabilities (model);
CREATE INDEX IF NOT EXISTS idx_channel_model_capabilities_channel
ON channel_model_capabilities (channel_id);
CREATE INDEX IF NOT EXISTS idx_channel_model_capabilities_channel_ok
ON channel_model_capabilities (channel_id, last_ok_at);
CREATE INDEX IF NOT EXISTS idx_channel_model_capabilities_model_err
ON channel_model_capabilities (model, last_err_at);