Files
Aether/crates/aether-data/schema/drivers/mysql/baseline/001_identity.sql
2026-05-06 03:09:53 +08:00

168 lines
5.5 KiB
SQL

CREATE TABLE IF NOT EXISTS users (
id VARCHAR(64) PRIMARY KEY,
external_id VARCHAR(255),
email VARCHAR(320),
username VARCHAR(255),
password_hash VARCHAR(255),
role VARCHAR(64),
auth_source VARCHAR(64) NOT NULL DEFAULT 'local',
email_verified TINYINT(1) NOT NULL DEFAULT 0,
is_active TINYINT(1) NOT NULL DEFAULT 1,
is_deleted TINYINT(1) NOT NULL DEFAULT 0,
allowed_models TEXT,
allowed_providers TEXT,
allowed_api_formats TEXT,
model_capability_settings TEXT,
rate_limit INT,
metadata TEXT,
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)
);
CREATE TABLE IF NOT EXISTS api_keys (
id VARCHAR(64) PRIMARY KEY,
user_id VARCHAR(64) NOT NULL,
key_hash VARCHAR(255) NOT NULL,
key_encrypted TEXT,
name VARCHAR(255),
key_prefix VARCHAR(64),
status VARCHAR(64) NOT NULL DEFAULT 'active',
allowed_models TEXT,
allowed_providers TEXT,
allowed_api_formats TEXT,
rate_limit INT DEFAULT 100,
concurrent_limit INT,
force_capabilities TEXT,
is_active TINYINT(1) NOT NULL DEFAULT 1,
is_locked TINYINT(1) NOT NULL DEFAULT 0,
is_standalone TINYINT(1) NOT NULL DEFAULT 0,
auto_delete_on_expiry TINYINT(1) NOT NULL DEFAULT 0,
total_requests BIGINT NOT NULL DEFAULT 0,
total_tokens BIGINT NOT NULL DEFAULT 0,
total_cost_usd DOUBLE NOT NULL DEFAULT 0,
metadata TEXT,
expires_at BIGINT,
last_used_at BIGINT,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY api_keys_key_hash_key (key_hash),
KEY api_keys_user_id_idx (user_id)
);
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)
);
CREATE TABLE IF NOT EXISTS announcements (
id VARCHAR(64) PRIMARY KEY,
title VARCHAR(200) NOT NULL,
content TEXT NOT NULL,
`type` VARCHAR(32) NOT NULL DEFAULT 'info',
priority INT NOT NULL DEFAULT 0,
author_id VARCHAR(64),
is_active TINYINT(1) NOT NULL DEFAULT 1,
is_pinned TINYINT(1) NOT NULL DEFAULT 0,
start_time BIGINT,
end_time BIGINT,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
KEY announcements_author_id_idx (author_id),
KEY announcements_created_at_idx (created_at),
KEY announcements_is_active_idx (is_active)
);
CREATE TABLE IF NOT EXISTS announcement_reads (
id VARCHAR(64) PRIMARY KEY,
user_id VARCHAR(64) NOT NULL,
announcement_id VARCHAR(64) NOT NULL,
read_at BIGINT NOT NULL,
UNIQUE KEY uq_user_announcement (user_id, announcement_id),
KEY announcement_reads_announcement_id_idx (announcement_id),
KEY announcement_reads_user_id_idx (user_id)
);
CREATE TABLE IF NOT EXISTS management_tokens (
id VARCHAR(64) PRIMARY KEY,
user_id VARCHAR(64) NOT NULL,
name VARCHAR(255) NOT NULL,
description TEXT,
token_hash VARCHAR(255) NOT NULL,
token_prefix VARCHAR(64),
allowed_ips TEXT,
expires_at BIGINT,
last_used_at BIGINT,
last_used_ip VARCHAR(255),
usage_count BIGINT NOT NULL DEFAULT 0,
is_active TINYINT(1) NOT NULL DEFAULT 1,
created_at BIGINT NOT NULL,
updated_at BIGINT NOT NULL,
UNIQUE KEY management_tokens_token_hash_key (token_hash),
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)
);