Files
MonkeyCode/backend/migration/000002_create_core_table.up.sql
2025-06-25 15:56:22 +08:00

134 lines
4.4 KiB
SQL

CREATE TABLE IF NOT EXISTS admins (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
username VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
status VARCHAR(20) DEFAULT 'active',
last_active_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_admins_username ON admins (username);
CREATE TABLE IF NOT EXISTS invite_codes (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
admin_id UUID NOT NULL,
code VARCHAR(255) UNIQUE NOT NULL,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
-- 用户表
CREATE TABLE IF NOT EXISTS users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
username VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE,
status VARCHAR(20) DEFAULT 'active',
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_users_username ON users (username);
CREATE TABLE IF NOT EXISTS user_login_histories (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL,
ip VARCHAR(255),
country VARCHAR(255),
province VARCHAR(255),
city VARCHAR(255),
isp VARCHAR(255),
asn VARCHAR(255),
client_version VARCHAR(255),
device VARCHAR(255),
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_user_login_histories_user_id ON user_login_histories (user_id);
CREATE TABLE IF NOT EXISTS admin_login_histories (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
admin_id UUID NOT NULL,
ip VARCHAR(255),
country VARCHAR(255),
province VARCHAR(255),
city VARCHAR(255),
isp VARCHAR(255),
asn VARCHAR(255),
client_version VARCHAR(255),
device VARCHAR(255),
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_admin_login_histories_admin_id ON admin_login_histories (admin_id);
-- 模型表
CREATE TABLE IF NOT EXISTS models (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL,
model_name VARCHAR(255) NOT NULL,
model_type VARCHAR(50) NOT NULL,
api_base VARCHAR(255),
api_key VARCHAR(255),
api_version VARCHAR(50),
description TEXT,
provider VARCHAR(50) NOT NULL,
context_length INTEGER DEFAULT 4096,
status VARCHAR(20) DEFAULT 'active',
capabilities JSONB,
parameters JSONB,
pricing JSONB,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_model_api_type ON models (model_name, api_base, model_type);
CREATE TABLE IF NOT EXISTS api_keys (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
user_id UUID NOT NULL,
key VARCHAR(64) NOT NULL UNIQUE,
name VARCHAR(64) NOT NULL,
status VARCHAR(16) NOT NULL DEFAULT 'active',
last_used TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE UNIQUE INDEX IF NOT EXISTS unique_idx_api_keys_user_id ON api_keys(user_id);
CREATE INDEX IF NOT EXISTS idx_api_keys_key ON api_keys(key);
CREATE TABLE IF NOT EXISTS records (
id UUID PRIMARY KEY DEFAULT uuid_generate_v1(),
user_id UUID NOT NULL,
model_id UUID NOT NULL,
task_id VARCHAR(255),
model_type VARCHAR(255) NOT NULL,
prompt TEXT,
completion TEXT,
is_accept BOOLEAN DEFAULT FALSE,
program_language VARCHAR(255),
work_mode VARCHAR(255),
code_lines BIGINT,
input_tokens BIGINT,
output_tokens BIGINT,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_records_user_id ON records (user_id);
CREATE INDEX IF NOT EXISTS idx_records_model_id ON records (model_id);
CREATE INDEX IF NOT EXISTS idx_records_task_id ON records (task_id);
CREATE INDEX IF NOT EXISTS idx_records_created_at ON records (created_at);
CREATE INDEX IF NOT EXISTS idx_records_updated_at ON records (updated_at);
CREATE TABLE IF NOT EXISTS settings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
enable_sso BOOLEAN DEFAULT FALSE,
force_two_factor_auth BOOLEAN DEFAULT FALSE,
disable_password_login BOOLEAN DEFAULT FALSE,
created_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP
);