124 lines
5.2 KiB
SQL
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;
|
|
|