chore: squash inactive mysql sqlite migrations

This commit is contained in:
fawney19
2026-05-06 03:09:53 +08:00
parent d7c2232062
commit 6219491389
25 changed files with 1095 additions and 515 deletions

View File

@@ -18,6 +18,8 @@ CREATE TABLE IF NOT EXISTS users (
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
last_login_at BIGINT,
ldap_dn VARCHAR(1024),
ldap_username VARCHAR(255),
UNIQUE KEY users_email_key (email),
UNIQUE KEY users_username_key (username)
);
@@ -118,6 +120,51 @@ CREATE TABLE IF NOT EXISTS management_tokens (
UNIQUE KEY uq_management_tokens_user_name (user_id, name),
KEY management_tokens_user_id_idx (user_id)
);
CREATE TABLE IF NOT EXISTS user_preferences (
id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL UNIQUE,
avatar_url VARCHAR(500),
bio TEXT,
default_provider_id VARCHAR(36),
theme VARCHAR(20) NOT NULL DEFAULT 'light',
language VARCHAR(10) NOT NULL DEFAULT 'zh-CN',
timezone VARCHAR(50) NOT NULL DEFAULT 'Asia/Shanghai',
email_notifications BOOLEAN NOT NULL DEFAULT TRUE,
usage_alerts BOOLEAN NOT NULL DEFAULT TRUE,
announcement_notifications BOOLEAN NOT NULL DEFAULT TRUE,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
INDEX user_preferences_default_provider_id_idx (default_provider_id),
INDEX user_preferences_user_id_idx (user_id)
);
CREATE TABLE IF NOT EXISTS user_sessions (
id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL,
client_device_id VARCHAR(128) NOT NULL,
device_label VARCHAR(120),
device_type VARCHAR(20) NOT NULL DEFAULT 'unknown',
browser_name VARCHAR(50),
browser_version VARCHAR(50),
os_name VARCHAR(50),
os_version VARCHAR(50),
device_model VARCHAR(100),
ip_address VARCHAR(45),
user_agent VARCHAR(1000),
client_hints TEXT,
refresh_token_hash VARCHAR(64) NOT NULL,
prev_refresh_token_hash VARCHAR(64),
rotated_at BIGINT,
last_seen_at BIGINT NOT NULL,
expires_at BIGINT NOT NULL,
revoked_at BIGINT,
revoke_reason VARCHAR(100),
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
INDEX user_sessions_user_active_idx (user_id, revoked_at, expires_at),
INDEX user_sessions_user_device_idx (user_id, client_device_id)
);
CREATE TABLE IF NOT EXISTS billing_rules (
id VARCHAR(64) PRIMARY KEY,
global_model_id VARCHAR(64),
@@ -479,6 +526,8 @@ CREATE TABLE IF NOT EXISTS user_oauth_links (
extra_data TEXT,
linked_at BIGINT NOT NULL,
last_login_at BIGINT,
UNIQUE KEY uq_user_oauth_links_provider_user (provider_type, provider_user_id),
UNIQUE KEY uq_user_oauth_links_user_provider (user_id, provider_type),
KEY user_oauth_links_provider_type_idx (provider_type),
KEY user_oauth_links_user_id_idx (user_id)
);
@@ -724,6 +773,7 @@ CREATE TABLE IF NOT EXISTS `usage` (
provider_endpoint_kind VARCHAR(64),
has_format_conversion TINYINT(1) NOT NULL DEFAULT 0,
is_stream TINYINT(1) NOT NULL DEFAULT 0,
upstream_is_stream TINYINT(1),
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
total_tokens BIGINT NOT NULL DEFAULT 0,
@@ -789,3 +839,182 @@ CREATE TABLE IF NOT EXISTS usage_settlement_snapshots (
KEY usage_settlement_snapshots_billing_status_idx (billing_status),
KEY usage_settlement_snapshots_wallet_id_idx (wallet_id)
);
CREATE TABLE IF NOT EXISTS stats_hourly (
id VARCHAR(64) PRIMARY KEY,
hour_utc BIGINT NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
success_requests BIGINT NOT NULL DEFAULT 0,
error_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
actual_total_cost DOUBLE NOT NULL DEFAULT 0,
avg_response_time_ms DOUBLE NOT NULL DEFAULT 0,
is_complete TINYINT(1) NOT NULL DEFAULT 0,
aggregated_at BIGINT,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_hourly_hour (hour_utc)
);
CREATE TABLE IF NOT EXISTS stats_hourly_user (
id VARCHAR(64) PRIMARY KEY,
hour_utc BIGINT NOT NULL,
user_id VARCHAR(64) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
success_requests BIGINT NOT NULL DEFAULT 0,
error_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_hourly_user (hour_utc, user_id)
);
CREATE TABLE IF NOT EXISTS stats_hourly_user_model (
id VARCHAR(64) PRIMARY KEY,
hour_utc BIGINT NOT NULL,
user_id VARCHAR(64) NOT NULL,
model VARCHAR(255) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_hourly_user_model (hour_utc, user_id, model)
);
CREATE TABLE IF NOT EXISTS stats_hourly_model (
id VARCHAR(64) PRIMARY KEY,
hour_utc BIGINT NOT NULL,
model VARCHAR(255) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
avg_response_time_ms DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_hourly_model (hour_utc, model)
);
CREATE TABLE IF NOT EXISTS stats_hourly_provider (
id VARCHAR(64) PRIMARY KEY,
hour_utc BIGINT NOT NULL,
provider_name VARCHAR(255) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_hourly_provider (hour_utc, provider_name)
);
CREATE TABLE IF NOT EXISTS stats_daily (
id VARCHAR(64) PRIMARY KEY,
`date` BIGINT NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
success_requests BIGINT NOT NULL DEFAULT 0,
error_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
actual_total_cost DOUBLE NOT NULL DEFAULT 0,
avg_response_time_ms DOUBLE NOT NULL DEFAULT 0,
fallback_count BIGINT NOT NULL DEFAULT 0,
unique_models BIGINT NOT NULL DEFAULT 0,
unique_providers BIGINT NOT NULL DEFAULT 0,
is_complete TINYINT(1) NOT NULL DEFAULT 0,
aggregated_at BIGINT,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_daily_date (`date`)
);
CREATE TABLE IF NOT EXISTS stats_daily_model (
id VARCHAR(64) PRIMARY KEY,
`date` BIGINT NOT NULL,
model VARCHAR(255) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
avg_response_time_ms DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_daily_model (`date`, model)
);
CREATE TABLE IF NOT EXISTS stats_daily_provider (
id VARCHAR(64) PRIMARY KEY,
`date` BIGINT NOT NULL,
provider_name VARCHAR(255) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_daily_provider (`date`, provider_name)
);
CREATE TABLE IF NOT EXISTS stats_daily_api_key (
id VARCHAR(64) PRIMARY KEY,
api_key_id VARCHAR(64) NOT NULL,
`date` BIGINT NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
success_requests BIGINT NOT NULL DEFAULT 0,
error_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
api_key_name VARCHAR(255),
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_daily_api_key (`date`, api_key_id)
);
CREATE TABLE IF NOT EXISTS stats_daily_error (
id VARCHAR(64) PRIMARY KEY,
`date` BIGINT NOT NULL,
error_category VARCHAR(255) NOT NULL,
provider_name VARCHAR(255),
model VARCHAR(255),
count BIGINT NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_daily_error (`date`, error_category, provider_name, model)
);
CREATE TABLE IF NOT EXISTS stats_user_daily (
id VARCHAR(64) PRIMARY KEY,
user_id VARCHAR(64) NOT NULL,
`date` BIGINT NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
success_requests BIGINT NOT NULL DEFAULT 0,
error_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
username VARCHAR(255),
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_user_daily (`date`, user_id)
);

View File

@@ -1,18 +0,0 @@
CREATE TABLE IF NOT EXISTS audit_logs (
id VARCHAR(64) PRIMARY KEY,
event_type VARCHAR(64) NOT NULL,
user_id VARCHAR(64),
api_key_id VARCHAR(64),
description TEXT NOT NULL,
ip_address VARCHAR(64),
user_agent VARCHAR(512),
request_id VARCHAR(128),
event_metadata TEXT,
status_code INT,
error_message TEXT,
created_at BIGINT NOT NULL,
KEY audit_logs_created_at_idx (created_at),
KEY audit_logs_event_type_idx (event_type),
KEY audit_logs_request_id_idx (request_id),
KEY audit_logs_user_id_idx (user_id)
);

View File

@@ -1,44 +0,0 @@
CREATE TABLE IF NOT EXISTS user_preferences (
id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL UNIQUE,
avatar_url VARCHAR(500),
bio TEXT,
default_provider_id VARCHAR(36),
theme VARCHAR(20) NOT NULL DEFAULT 'light',
language VARCHAR(10) NOT NULL DEFAULT 'zh-CN',
timezone VARCHAR(50) NOT NULL DEFAULT 'Asia/Shanghai',
email_notifications BOOLEAN NOT NULL DEFAULT TRUE,
usage_alerts BOOLEAN NOT NULL DEFAULT TRUE,
announcement_notifications BOOLEAN NOT NULL DEFAULT TRUE,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
INDEX user_preferences_default_provider_id_idx (default_provider_id),
INDEX user_preferences_user_id_idx (user_id)
);
CREATE TABLE IF NOT EXISTS user_sessions (
id VARCHAR(36) PRIMARY KEY,
user_id VARCHAR(36) NOT NULL,
client_device_id VARCHAR(128) NOT NULL,
device_label VARCHAR(120),
device_type VARCHAR(20) NOT NULL DEFAULT 'unknown',
browser_name VARCHAR(50),
browser_version VARCHAR(50),
os_name VARCHAR(50),
os_version VARCHAR(50),
device_model VARCHAR(100),
ip_address VARCHAR(45),
user_agent VARCHAR(1000),
client_hints TEXT,
refresh_token_hash VARCHAR(64) NOT NULL,
prev_refresh_token_hash VARCHAR(64),
rotated_at BIGINT,
last_seen_at BIGINT NOT NULL,
expires_at BIGINT NOT NULL,
revoked_at BIGINT,
revoke_reason VARCHAR(100),
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
INDEX user_sessions_user_active_idx (user_id, revoked_at, expires_at),
INDEX user_sessions_user_device_idx (user_id, client_device_id)
);

View File

@@ -1,2 +0,0 @@
ALTER TABLE users ADD COLUMN ldap_dn VARCHAR(1024);
ALTER TABLE users ADD COLUMN ldap_username VARCHAR(255);

View File

@@ -1,3 +0,0 @@
ALTER TABLE user_oauth_links
ADD UNIQUE KEY uq_user_oauth_links_provider_user (provider_type, provider_user_id),
ADD UNIQUE KEY uq_user_oauth_links_user_provider (user_id, provider_type);

View File

@@ -1,177 +0,0 @@
CREATE TABLE IF NOT EXISTS stats_hourly (
id VARCHAR(64) PRIMARY KEY,
hour_utc BIGINT NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
success_requests BIGINT NOT NULL DEFAULT 0,
error_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
actual_total_cost DOUBLE NOT NULL DEFAULT 0,
avg_response_time_ms DOUBLE NOT NULL DEFAULT 0,
is_complete TINYINT(1) NOT NULL DEFAULT 0,
aggregated_at BIGINT,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_hourly_hour (hour_utc)
);
CREATE TABLE IF NOT EXISTS stats_hourly_user (
id VARCHAR(64) PRIMARY KEY,
hour_utc BIGINT NOT NULL,
user_id VARCHAR(64) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
success_requests BIGINT NOT NULL DEFAULT 0,
error_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_hourly_user (hour_utc, user_id)
);
CREATE TABLE IF NOT EXISTS stats_hourly_user_model (
id VARCHAR(64) PRIMARY KEY,
hour_utc BIGINT NOT NULL,
user_id VARCHAR(64) NOT NULL,
model VARCHAR(255) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_hourly_user_model (hour_utc, user_id, model)
);
CREATE TABLE IF NOT EXISTS stats_hourly_model (
id VARCHAR(64) PRIMARY KEY,
hour_utc BIGINT NOT NULL,
model VARCHAR(255) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
avg_response_time_ms DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_hourly_model (hour_utc, model)
);
CREATE TABLE IF NOT EXISTS stats_hourly_provider (
id VARCHAR(64) PRIMARY KEY,
hour_utc BIGINT NOT NULL,
provider_name VARCHAR(255) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_hourly_provider (hour_utc, provider_name)
);
CREATE TABLE IF NOT EXISTS stats_daily (
id VARCHAR(64) PRIMARY KEY,
`date` BIGINT NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
success_requests BIGINT NOT NULL DEFAULT 0,
error_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
actual_total_cost DOUBLE NOT NULL DEFAULT 0,
avg_response_time_ms DOUBLE NOT NULL DEFAULT 0,
fallback_count BIGINT NOT NULL DEFAULT 0,
unique_models BIGINT NOT NULL DEFAULT 0,
unique_providers BIGINT NOT NULL DEFAULT 0,
is_complete TINYINT(1) NOT NULL DEFAULT 0,
aggregated_at BIGINT,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_daily_date (`date`)
);
CREATE TABLE IF NOT EXISTS stats_daily_model (
id VARCHAR(64) PRIMARY KEY,
`date` BIGINT NOT NULL,
model VARCHAR(255) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
avg_response_time_ms DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_daily_model (`date`, model)
);
CREATE TABLE IF NOT EXISTS stats_daily_provider (
id VARCHAR(64) PRIMARY KEY,
`date` BIGINT NOT NULL,
provider_name VARCHAR(255) NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_daily_provider (`date`, provider_name)
);
CREATE TABLE IF NOT EXISTS stats_daily_api_key (
id VARCHAR(64) PRIMARY KEY,
api_key_id VARCHAR(64) NOT NULL,
`date` BIGINT NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
success_requests BIGINT NOT NULL DEFAULT 0,
error_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
api_key_name VARCHAR(255),
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_daily_api_key (`date`, api_key_id)
);
CREATE TABLE IF NOT EXISTS stats_daily_error (
id VARCHAR(64) PRIMARY KEY,
`date` BIGINT NOT NULL,
error_category VARCHAR(255) NOT NULL,
provider_name VARCHAR(255),
model VARCHAR(255),
count BIGINT NOT NULL DEFAULT 0,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_daily_error (`date`, error_category, provider_name, model)
);
CREATE TABLE IF NOT EXISTS stats_user_daily (
id VARCHAR(64) PRIMARY KEY,
user_id VARCHAR(64) NOT NULL,
`date` BIGINT NOT NULL,
total_requests BIGINT NOT NULL DEFAULT 0,
success_requests BIGINT NOT NULL DEFAULT 0,
error_requests BIGINT NOT NULL DEFAULT 0,
input_tokens BIGINT NOT NULL DEFAULT 0,
output_tokens BIGINT NOT NULL DEFAULT 0,
cache_creation_tokens BIGINT NOT NULL DEFAULT 0,
cache_read_tokens BIGINT NOT NULL DEFAULT 0,
total_cost DOUBLE NOT NULL DEFAULT 0,
username VARCHAR(255),
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY uq_stats_user_daily (`date`, user_id)
);

View File

@@ -17,7 +17,9 @@ CREATE TABLE IF NOT EXISTS users (
metadata TEXT,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
last_login_at INTEGER
last_login_at INTEGER,
ldap_dn TEXT,
ldap_username TEXT
);
CREATE TABLE IF NOT EXISTS api_keys (
@@ -114,6 +116,55 @@ CREATE TABLE IF NOT EXISTS management_tokens (
UNIQUE (user_id, name)
);
CREATE INDEX IF NOT EXISTS management_tokens_user_id_idx ON management_tokens (user_id);
CREATE TABLE IF NOT EXISTS user_preferences (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL UNIQUE,
avatar_url TEXT,
bio TEXT,
default_provider_id TEXT,
theme TEXT NOT NULL DEFAULT 'light',
language TEXT NOT NULL DEFAULT 'zh-CN',
timezone TEXT NOT NULL DEFAULT 'Asia/Shanghai',
email_notifications INTEGER NOT NULL DEFAULT 1,
usage_alerts INTEGER NOT NULL DEFAULT 1,
announcement_notifications INTEGER NOT NULL DEFAULT 1,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
);
CREATE INDEX IF NOT EXISTS user_preferences_default_provider_id_idx
ON user_preferences (default_provider_id);
CREATE INDEX IF NOT EXISTS user_preferences_user_id_idx
ON user_preferences (user_id);
CREATE TABLE IF NOT EXISTS user_sessions (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
client_device_id TEXT NOT NULL,
device_label TEXT,
device_type TEXT NOT NULL DEFAULT 'unknown',
browser_name TEXT,
browser_version TEXT,
os_name TEXT,
os_version TEXT,
device_model TEXT,
ip_address TEXT,
user_agent TEXT,
client_hints TEXT,
refresh_token_hash TEXT NOT NULL,
prev_refresh_token_hash TEXT,
rotated_at INTEGER,
last_seen_at INTEGER NOT NULL,
expires_at INTEGER NOT NULL,
revoked_at INTEGER,
revoke_reason TEXT,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
);
CREATE INDEX IF NOT EXISTS user_sessions_user_active_idx
ON user_sessions (user_id, revoked_at, expires_at);
CREATE INDEX IF NOT EXISTS user_sessions_user_device_idx
ON user_sessions (user_id, client_device_id);
CREATE TABLE IF NOT EXISTS billing_rules (
id TEXT PRIMARY KEY,
global_model_id TEXT,
@@ -478,6 +529,10 @@ CREATE TABLE IF NOT EXISTS user_oauth_links (
linked_at INTEGER NOT NULL,
last_login_at INTEGER
);
CREATE UNIQUE INDEX IF NOT EXISTS uq_user_oauth_links_provider_user
ON user_oauth_links (provider_type, provider_user_id);
CREATE UNIQUE INDEX IF NOT EXISTS uq_user_oauth_links_user_provider
ON user_oauth_links (user_id, provider_type);
CREATE INDEX IF NOT EXISTS user_oauth_links_provider_type_idx ON user_oauth_links (provider_type);
CREATE INDEX IF NOT EXISTS user_oauth_links_user_id_idx ON user_oauth_links (user_id);
CREATE TABLE IF NOT EXISTS proxy_nodes (
@@ -741,6 +796,7 @@ CREATE TABLE IF NOT EXISTS "usage" (
provider_endpoint_kind TEXT,
has_format_conversion INTEGER NOT NULL DEFAULT 0,
is_stream INTEGER NOT NULL DEFAULT 0,
upstream_is_stream INTEGER,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
total_tokens INTEGER NOT NULL DEFAULT 0,
@@ -808,3 +864,180 @@ CREATE INDEX IF NOT EXISTS usage_settlement_snapshots_billing_status_idx
ON usage_settlement_snapshots (billing_status);
CREATE INDEX IF NOT EXISTS usage_settlement_snapshots_wallet_id_idx
ON usage_settlement_snapshots (wallet_id);
CREATE TABLE IF NOT EXISTS stats_hourly (
id TEXT PRIMARY KEY,
hour_utc INTEGER NOT NULL UNIQUE,
total_requests INTEGER NOT NULL DEFAULT 0,
success_requests INTEGER NOT NULL DEFAULT 0,
error_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
cache_creation_tokens INTEGER NOT NULL DEFAULT 0,
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
actual_total_cost REAL NOT NULL DEFAULT 0,
avg_response_time_ms REAL NOT NULL DEFAULT 0,
is_complete INTEGER NOT NULL DEFAULT 0,
aggregated_at INTEGER,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS stats_hourly_user (
id TEXT PRIMARY KEY,
hour_utc INTEGER NOT NULL,
user_id TEXT NOT NULL,
total_requests INTEGER NOT NULL DEFAULT 0,
success_requests INTEGER NOT NULL DEFAULT 0,
error_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE (hour_utc, user_id)
);
CREATE TABLE IF NOT EXISTS stats_hourly_user_model (
id TEXT PRIMARY KEY,
hour_utc INTEGER NOT NULL,
user_id TEXT NOT NULL,
model TEXT NOT NULL,
total_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE (hour_utc, user_id, model)
);
CREATE TABLE IF NOT EXISTS stats_hourly_model (
id TEXT PRIMARY KEY,
hour_utc INTEGER NOT NULL,
model TEXT NOT NULL,
total_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
avg_response_time_ms REAL NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE (hour_utc, model)
);
CREATE TABLE IF NOT EXISTS stats_hourly_provider (
id TEXT PRIMARY KEY,
hour_utc INTEGER NOT NULL,
provider_name TEXT NOT NULL,
total_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE (hour_utc, provider_name)
);
CREATE TABLE IF NOT EXISTS stats_daily (
id TEXT PRIMARY KEY,
"date" INTEGER NOT NULL UNIQUE,
total_requests INTEGER NOT NULL DEFAULT 0,
success_requests INTEGER NOT NULL DEFAULT 0,
error_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
cache_creation_tokens INTEGER NOT NULL DEFAULT 0,
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
actual_total_cost REAL NOT NULL DEFAULT 0,
avg_response_time_ms REAL NOT NULL DEFAULT 0,
fallback_count INTEGER NOT NULL DEFAULT 0,
unique_models INTEGER NOT NULL DEFAULT 0,
unique_providers INTEGER NOT NULL DEFAULT 0,
is_complete INTEGER NOT NULL DEFAULT 0,
aggregated_at INTEGER,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS stats_daily_model (
id TEXT PRIMARY KEY,
"date" INTEGER NOT NULL,
model TEXT NOT NULL,
total_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
cache_creation_tokens INTEGER NOT NULL DEFAULT 0,
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
avg_response_time_ms REAL NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE ("date", model)
);
CREATE TABLE IF NOT EXISTS stats_daily_provider (
id TEXT PRIMARY KEY,
"date" INTEGER NOT NULL,
provider_name TEXT NOT NULL,
total_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
cache_creation_tokens INTEGER NOT NULL DEFAULT 0,
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE ("date", provider_name)
);
CREATE TABLE IF NOT EXISTS stats_daily_api_key (
id TEXT PRIMARY KEY,
api_key_id TEXT NOT NULL,
"date" INTEGER NOT NULL,
total_requests INTEGER NOT NULL DEFAULT 0,
success_requests INTEGER NOT NULL DEFAULT 0,
error_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
cache_creation_tokens INTEGER NOT NULL DEFAULT 0,
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
api_key_name TEXT,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE ("date", api_key_id)
);
CREATE TABLE IF NOT EXISTS stats_daily_error (
id TEXT PRIMARY KEY,
"date" INTEGER NOT NULL,
error_category TEXT NOT NULL,
provider_name TEXT,
model TEXT,
count INTEGER NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE ("date", error_category, provider_name, model)
);
CREATE TABLE IF NOT EXISTS stats_user_daily (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
"date" INTEGER NOT NULL,
total_requests INTEGER NOT NULL DEFAULT 0,
success_requests INTEGER NOT NULL DEFAULT 0,
error_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
cache_creation_tokens INTEGER NOT NULL DEFAULT 0,
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
username TEXT,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE ("date", user_id)
);

View File

@@ -1,18 +0,0 @@
CREATE TABLE IF NOT EXISTS audit_logs (
id TEXT PRIMARY KEY,
event_type TEXT NOT NULL,
user_id TEXT,
api_key_id TEXT,
description TEXT NOT NULL,
ip_address TEXT,
user_agent TEXT,
request_id TEXT,
event_metadata TEXT,
status_code INTEGER,
error_message TEXT,
created_at INTEGER NOT NULL
);
CREATE INDEX IF NOT EXISTS audit_logs_created_at_idx ON audit_logs (created_at);
CREATE INDEX IF NOT EXISTS audit_logs_event_type_idx ON audit_logs (event_type);
CREATE INDEX IF NOT EXISTS audit_logs_request_id_idx ON audit_logs (request_id);
CREATE INDEX IF NOT EXISTS audit_logs_user_id_idx ON audit_logs (user_id);

View File

@@ -1,48 +0,0 @@
CREATE TABLE IF NOT EXISTS user_preferences (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL UNIQUE,
avatar_url TEXT,
bio TEXT,
default_provider_id TEXT,
theme TEXT NOT NULL DEFAULT 'light',
language TEXT NOT NULL DEFAULT 'zh-CN',
timezone TEXT NOT NULL DEFAULT 'Asia/Shanghai',
email_notifications INTEGER NOT NULL DEFAULT 1,
usage_alerts INTEGER NOT NULL DEFAULT 1,
announcement_notifications INTEGER NOT NULL DEFAULT 1,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
);
CREATE INDEX IF NOT EXISTS user_preferences_default_provider_id_idx
ON user_preferences (default_provider_id);
CREATE INDEX IF NOT EXISTS user_preferences_user_id_idx
ON user_preferences (user_id);
CREATE TABLE IF NOT EXISTS user_sessions (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
client_device_id TEXT NOT NULL,
device_label TEXT,
device_type TEXT NOT NULL DEFAULT 'unknown',
browser_name TEXT,
browser_version TEXT,
os_name TEXT,
os_version TEXT,
device_model TEXT,
ip_address TEXT,
user_agent TEXT,
client_hints TEXT,
refresh_token_hash TEXT NOT NULL,
prev_refresh_token_hash TEXT,
rotated_at INTEGER,
last_seen_at INTEGER NOT NULL,
expires_at INTEGER NOT NULL,
revoked_at INTEGER,
revoke_reason TEXT,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
);
CREATE INDEX IF NOT EXISTS user_sessions_user_active_idx
ON user_sessions (user_id, revoked_at, expires_at);
CREATE INDEX IF NOT EXISTS user_sessions_user_device_idx
ON user_sessions (user_id, client_device_id);

View File

@@ -1,2 +0,0 @@
ALTER TABLE users ADD COLUMN ldap_dn TEXT;
ALTER TABLE users ADD COLUMN ldap_username TEXT;

View File

@@ -1,5 +0,0 @@
CREATE UNIQUE INDEX IF NOT EXISTS uq_user_oauth_links_provider_user
ON user_oauth_links (provider_type, provider_user_id);
CREATE UNIQUE INDEX IF NOT EXISTS uq_user_oauth_links_user_provider
ON user_oauth_links (user_id, provider_type);

View File

@@ -1,175 +0,0 @@
CREATE TABLE IF NOT EXISTS stats_hourly (
id TEXT PRIMARY KEY,
hour_utc INTEGER NOT NULL UNIQUE,
total_requests INTEGER NOT NULL DEFAULT 0,
success_requests INTEGER NOT NULL DEFAULT 0,
error_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
cache_creation_tokens INTEGER NOT NULL DEFAULT 0,
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
actual_total_cost REAL NOT NULL DEFAULT 0,
avg_response_time_ms REAL NOT NULL DEFAULT 0,
is_complete INTEGER NOT NULL DEFAULT 0,
aggregated_at INTEGER,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS stats_hourly_user (
id TEXT PRIMARY KEY,
hour_utc INTEGER NOT NULL,
user_id TEXT NOT NULL,
total_requests INTEGER NOT NULL DEFAULT 0,
success_requests INTEGER NOT NULL DEFAULT 0,
error_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE (hour_utc, user_id)
);
CREATE TABLE IF NOT EXISTS stats_hourly_user_model (
id TEXT PRIMARY KEY,
hour_utc INTEGER NOT NULL,
user_id TEXT NOT NULL,
model TEXT NOT NULL,
total_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE (hour_utc, user_id, model)
);
CREATE TABLE IF NOT EXISTS stats_hourly_model (
id TEXT PRIMARY KEY,
hour_utc INTEGER NOT NULL,
model TEXT NOT NULL,
total_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
avg_response_time_ms REAL NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE (hour_utc, model)
);
CREATE TABLE IF NOT EXISTS stats_hourly_provider (
id TEXT PRIMARY KEY,
hour_utc INTEGER NOT NULL,
provider_name TEXT NOT NULL,
total_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE (hour_utc, provider_name)
);
CREATE TABLE IF NOT EXISTS stats_daily (
id TEXT PRIMARY KEY,
"date" INTEGER NOT NULL UNIQUE,
total_requests INTEGER NOT NULL DEFAULT 0,
success_requests INTEGER NOT NULL DEFAULT 0,
error_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
cache_creation_tokens INTEGER NOT NULL DEFAULT 0,
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
actual_total_cost REAL NOT NULL DEFAULT 0,
avg_response_time_ms REAL NOT NULL DEFAULT 0,
fallback_count INTEGER NOT NULL DEFAULT 0,
unique_models INTEGER NOT NULL DEFAULT 0,
unique_providers INTEGER NOT NULL DEFAULT 0,
is_complete INTEGER NOT NULL DEFAULT 0,
aggregated_at INTEGER,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS stats_daily_model (
id TEXT PRIMARY KEY,
"date" INTEGER NOT NULL,
model TEXT NOT NULL,
total_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
cache_creation_tokens INTEGER NOT NULL DEFAULT 0,
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
avg_response_time_ms REAL NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE ("date", model)
);
CREATE TABLE IF NOT EXISTS stats_daily_provider (
id TEXT PRIMARY KEY,
"date" INTEGER NOT NULL,
provider_name TEXT NOT NULL,
total_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
cache_creation_tokens INTEGER NOT NULL DEFAULT 0,
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE ("date", provider_name)
);
CREATE TABLE IF NOT EXISTS stats_daily_api_key (
id TEXT PRIMARY KEY,
api_key_id TEXT NOT NULL,
"date" INTEGER NOT NULL,
total_requests INTEGER NOT NULL DEFAULT 0,
success_requests INTEGER NOT NULL DEFAULT 0,
error_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
cache_creation_tokens INTEGER NOT NULL DEFAULT 0,
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
api_key_name TEXT,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE ("date", api_key_id)
);
CREATE TABLE IF NOT EXISTS stats_daily_error (
id TEXT PRIMARY KEY,
"date" INTEGER NOT NULL,
error_category TEXT NOT NULL,
provider_name TEXT,
model TEXT,
count INTEGER NOT NULL DEFAULT 0,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE ("date", error_category, provider_name, model)
);
CREATE TABLE IF NOT EXISTS stats_user_daily (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
"date" INTEGER NOT NULL,
total_requests INTEGER NOT NULL DEFAULT 0,
success_requests INTEGER NOT NULL DEFAULT 0,
error_requests INTEGER NOT NULL DEFAULT 0,
input_tokens INTEGER NOT NULL DEFAULT 0,
output_tokens INTEGER NOT NULL DEFAULT 0,
cache_creation_tokens INTEGER NOT NULL DEFAULT 0,
cache_read_tokens INTEGER NOT NULL DEFAULT 0,
total_cost REAL NOT NULL DEFAULT 0,
username TEXT,
created_at INTEGER NOT NULL,
updated_at INTEGER NOT NULL,
UNIQUE ("date", user_id)
);