Files
kefu/im/backend/migrations/001_users.sql
T
2026-08-27 14:04:28 +08:00

124 lines
5.2 KiB
SQL

SET NAMES utf8mb4;
CREATE TABLE IF NOT EXISTS users (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
public_id VARCHAR(20) NOT NULL,
country_code VARCHAR(8) NOT NULL DEFAULT '+86',
phone_hash BINARY(32) NULL,
phone_cipher VARBINARY(255) NULL,
password_hash VARCHAR(255) NOT NULL,
status TINYINT UNSIGNED NOT NULL DEFAULT 1,
risk_level TINYINT UNSIGNED NOT NULL DEFAULT 0,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
deleted_at DATETIME(3) NULL,
PRIMARY KEY (id),
UNIQUE KEY uk_users_public_id (public_id),
UNIQUE KEY uk_users_phone_hash (phone_hash),
KEY idx_users_status_created (status, created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS user_profiles (
user_id BIGINT UNSIGNED NOT NULL,
nickname VARCHAR(50) NOT NULL,
avatar_url VARCHAR(500) NOT NULL DEFAULT '',
cover_url VARCHAR(500) NOT NULL DEFAULT '',
gender TINYINT UNSIGNED NOT NULL DEFAULT 0,
birthday DATE NULL,
height_cm SMALLINT UNSIGNED NULL,
city_code VARCHAR(20) NOT NULL DEFAULT '',
city_name VARCHAR(50) NOT NULL DEFAULT '',
occupation VARCHAR(100) NOT NULL DEFAULT '',
education TINYINT UNSIGNED NOT NULL DEFAULT 0,
relationship_status TINYINT UNSIGNED NOT NULL DEFAULT 0,
bio VARCHAR(500) NOT NULL DEFAULT '',
profile_score SMALLINT UNSIGNED NOT NULL DEFAULT 0,
is_vip TINYINT UNSIGNED NOT NULL DEFAULT 0,
vip_level TINYINT UNSIGNED NOT NULL DEFAULT 0,
last_active_at DATETIME(3) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (user_id),
KEY idx_profiles_city_active (city_code, last_active_at),
CONSTRAINT fk_profiles_user FOREIGN KEY (user_id) REFERENCES users(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS user_privacy_settings (
user_id BIGINT UNSIGNED NOT NULL,
nearby_visible TINYINT(1) NOT NULL DEFAULT 1,
distance_visible TINYINT(1) NOT NULL DEFAULT 1,
online_visible TINYINT(1) NOT NULL DEFAULT 1,
last_active_visible TINYINT(1) NOT NULL DEFAULT 1,
allow_stranger_message TINYINT(1) NOT NULL DEFAULT 1,
allow_profile_visit_record TINYINT(1) NOT NULL DEFAULT 1,
allow_search TINYINT(1) NOT NULL DEFAULT 1,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
PRIMARY KEY (user_id),
CONSTRAINT fk_privacy_user FOREIGN KEY (user_id) REFERENCES users(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS user_devices (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id BIGINT UNSIGNED NOT NULL,
device_id VARCHAR(100) NOT NULL,
platform VARCHAR(20) NOT NULL,
device_model VARCHAR(100) NOT NULL DEFAULT '',
os_version VARCHAR(50) NOT NULL DEFAULT '',
app_version VARCHAR(30) NOT NULL DEFAULT '',
push_provider VARCHAR(30) NOT NULL DEFAULT '',
push_token VARCHAR(255) NOT NULL DEFAULT '',
last_ip VARCHAR(45) NOT NULL DEFAULT '',
last_active_at DATETIME(3) NULL,
status TINYINT UNSIGNED NOT NULL DEFAULT 1,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_device_user_device (user_id, device_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS user_sessions (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
user_id BIGINT UNSIGNED NOT NULL,
device_id VARCHAR(100) NOT NULL,
refresh_token_hash BINARY(32) NOT NULL,
expires_at DATETIME(3) NOT NULL,
last_active_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
revoked_at DATETIME(3) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
KEY idx_sessions_user (user_id, revoked_at),
UNIQUE KEY uk_sessions_refresh (refresh_token_hash)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS tags (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
category VARCHAR(30) NOT NULL,
name VARCHAR(50) NOT NULL,
icon VARCHAR(100) NOT NULL DEFAULT '',
status TINYINT UNSIGNED NOT NULL DEFAULT 1,
sort_order INT NOT NULL DEFAULT 0,
PRIMARY KEY (id),
UNIQUE KEY uk_tags_category_name (category, name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS user_tags (
user_id BIGINT UNSIGNED NOT NULL,
tag_id BIGINT UNSIGNED NOT NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (user_id, tag_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS admin_users (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
real_name VARCHAR(50) NOT NULL DEFAULT '',
avatar_url VARCHAR(500) NOT NULL DEFAULT '',
status TINYINT UNSIGNED NOT NULL DEFAULT 1,
last_login_at DATETIME(3) NULL,
created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (id),
UNIQUE KEY uk_admin_username (username)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;