140 lines
5.3 KiB
SQL
140 lines
5.3 KiB
SQL
CREATE DATABASE IF NOT EXISTS hy_user DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
USE hy_user;
|
|
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
user_id BIGINT NOT NULL PRIMARY KEY,
|
|
default_display_user_id VARCHAR(32) NOT NULL,
|
|
current_display_user_id VARCHAR(32) NOT NULL,
|
|
current_display_user_id_kind VARCHAR(32) NOT NULL,
|
|
current_display_user_id_expires_at_ms BIGINT NULL,
|
|
status VARCHAR(32) NOT NULL,
|
|
created_at_ms BIGINT NOT NULL,
|
|
updated_at_ms BIGINT NOT NULL,
|
|
UNIQUE KEY uk_users_default_display_user_id (default_display_user_id),
|
|
UNIQUE KEY uk_users_current_display_user_id (current_display_user_id),
|
|
KEY idx_users_status (status)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS user_display_user_ids (
|
|
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
display_user_id VARCHAR(32) NOT NULL,
|
|
user_id BIGINT NOT NULL,
|
|
display_user_id_kind VARCHAR(32) NOT NULL,
|
|
status VARCHAR(32) NOT NULL,
|
|
assigned_at_ms BIGINT NOT NULL,
|
|
activated_at_ms BIGINT NULL,
|
|
expires_at_ms BIGINT NULL,
|
|
released_at_ms BIGINT NULL,
|
|
release_reason VARCHAR(64) NULL,
|
|
created_at_ms BIGINT NOT NULL,
|
|
updated_at_ms BIGINT NOT NULL,
|
|
live_display_user_id VARCHAR(32)
|
|
GENERATED ALWAYS AS (
|
|
CASE
|
|
WHEN status IN ('active', 'held', 'reserved', 'blocked') THEN display_user_id
|
|
ELSE NULL
|
|
END
|
|
) STORED,
|
|
active_user_id BIGINT
|
|
GENERATED ALWAYS AS (
|
|
CASE WHEN status = 'active' THEN user_id ELSE NULL END
|
|
) STORED,
|
|
UNIQUE KEY uk_user_display_user_ids_live (live_display_user_id),
|
|
UNIQUE KEY uk_user_display_user_ids_active_user (active_user_id),
|
|
KEY idx_user_display_user_ids_user_id (user_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS pretty_display_user_id_leases (
|
|
lease_id VARCHAR(64) NOT NULL PRIMARY KEY,
|
|
display_user_id VARCHAR(32) NOT NULL,
|
|
user_id BIGINT NOT NULL,
|
|
status VARCHAR(32) NOT NULL,
|
|
starts_at_ms BIGINT NOT NULL,
|
|
expires_at_ms BIGINT NOT NULL,
|
|
payment_receipt_id VARCHAR(64) NULL,
|
|
source VARCHAR(32) NOT NULL,
|
|
created_at_ms BIGINT NOT NULL,
|
|
updated_at_ms BIGINT NOT NULL,
|
|
active_display_user_id VARCHAR(32)
|
|
GENERATED ALWAYS AS (
|
|
CASE WHEN status = 'active' THEN display_user_id ELSE NULL END
|
|
) STORED,
|
|
active_user_id BIGINT
|
|
GENERATED ALWAYS AS (
|
|
CASE WHEN status = 'active' THEN user_id ELSE NULL END
|
|
) STORED,
|
|
UNIQUE KEY uk_pretty_display_user_id_active (active_display_user_id),
|
|
UNIQUE KEY uk_pretty_display_user_id_active_user (active_user_id),
|
|
KEY idx_pretty_display_user_id_leases_user (user_id, status),
|
|
KEY idx_pretty_display_user_id_leases_expire (status, expires_at_ms)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS display_user_id_change_logs (
|
|
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
user_id BIGINT NOT NULL,
|
|
old_display_user_id VARCHAR(32) NOT NULL,
|
|
new_display_user_id VARCHAR(32) NOT NULL,
|
|
old_display_user_id_kind VARCHAR(32) NOT NULL,
|
|
new_display_user_id_kind VARCHAR(32) NOT NULL,
|
|
change_type VARCHAR(32) NOT NULL,
|
|
lease_id VARCHAR(64) NULL,
|
|
reason VARCHAR(64) NOT NULL,
|
|
operator_user_id BIGINT NULL,
|
|
request_id VARCHAR(96) NOT NULL,
|
|
created_at_ms BIGINT NOT NULL,
|
|
KEY idx_display_user_id_change_logs_user_id (user_id),
|
|
KEY idx_display_user_id_change_logs_request_id (request_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS password_accounts (
|
|
user_id BIGINT NOT NULL,
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
hash_alg VARCHAR(32) NOT NULL,
|
|
created_at_ms BIGINT NOT NULL,
|
|
updated_at_ms BIGINT NOT NULL,
|
|
PRIMARY KEY (user_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS third_party_identities (
|
|
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
user_id BIGINT NOT NULL,
|
|
provider VARCHAR(64) NOT NULL,
|
|
provider_subject VARCHAR(191) NOT NULL,
|
|
provider_union_id VARCHAR(191) NULL,
|
|
created_at_ms BIGINT NOT NULL,
|
|
updated_at_ms BIGINT NOT NULL,
|
|
UNIQUE KEY uk_third_party_provider_subject (provider, provider_subject),
|
|
KEY idx_third_party_user_id (user_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS auth_sessions (
|
|
session_id VARCHAR(96) NOT NULL PRIMARY KEY,
|
|
user_id BIGINT NOT NULL,
|
|
refresh_token_hash VARCHAR(128) NOT NULL,
|
|
device_id VARCHAR(128) NOT NULL,
|
|
expires_at_ms BIGINT NOT NULL,
|
|
revoked_at_ms BIGINT NULL,
|
|
created_at_ms BIGINT NOT NULL,
|
|
updated_at_ms BIGINT NOT NULL,
|
|
UNIQUE KEY uk_auth_sessions_refresh_token_hash (refresh_token_hash),
|
|
KEY idx_auth_sessions_user_id (user_id),
|
|
KEY idx_auth_sessions_expires_at (expires_at_ms)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE IF NOT EXISTS login_audit (
|
|
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
|
request_id VARCHAR(96) NOT NULL,
|
|
user_id BIGINT NULL,
|
|
login_type VARCHAR(32) NOT NULL,
|
|
provider VARCHAR(64) NULL,
|
|
result VARCHAR(32) NOT NULL,
|
|
failure_code VARCHAR(64) NULL,
|
|
client_ip VARCHAR(64) NULL,
|
|
user_agent VARCHAR(512) NULL,
|
|
created_at_ms BIGINT NOT NULL,
|
|
KEY idx_login_audit_user_id (user_id),
|
|
KEY idx_login_audit_request_id (request_id),
|
|
KEY idx_login_audit_created_at (created_at_ms)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|