248 lines
10 KiB
SQL
248 lines
10 KiB
SQL
CREATE TABLE users (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
phone VARCHAR(32) NOT NULL,
|
|
nickname VARCHAR(64) NOT NULL DEFAULT '',
|
|
avatar_url VARCHAR(512) NOT NULL DEFAULT '',
|
|
realname_status VARCHAR(32) NOT NULL DEFAULT 'unverified',
|
|
risk_status VARCHAR(32) NOT NULL DEFAULT 'normal',
|
|
credit_score INT NOT NULL DEFAULT 100,
|
|
status VARCHAR(32) NOT NULL DEFAULT 'active',
|
|
last_login_at DATETIME NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uk_users_phone (phone)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE user_realname (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
provider VARCHAR(32) NOT NULL,
|
|
provider_order_no VARCHAR(128) NOT NULL DEFAULT '',
|
|
status VARCHAR(32) NOT NULL DEFAULT 'pending',
|
|
masked_name VARCHAR(64) NOT NULL DEFAULT '',
|
|
masked_id_no VARCHAR(64) NOT NULL DEFAULT '',
|
|
verified_at DATETIME NULL,
|
|
fail_reason VARCHAR(255) NOT NULL DEFAULT '',
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uk_user_realname_user_id (user_id),
|
|
KEY idx_user_realname_provider_order_no (provider_order_no)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE game_accounts (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
owner_id BIGINT UNSIGNED NOT NULL,
|
|
game_name VARCHAR(64) NOT NULL DEFAULT 'delta_force',
|
|
server_region VARCHAR(64) NOT NULL,
|
|
login_platform VARCHAR(64) NOT NULL,
|
|
title VARCHAR(128) NOT NULL,
|
|
description TEXT NULL,
|
|
rank_level VARCHAR(64) NOT NULL DEFAULT '',
|
|
haf_coin_amount BIGINT NOT NULL DEFAULT 0,
|
|
asset_summary JSON NULL,
|
|
season_tags JSON NULL,
|
|
screenshot_urls JSON NULL,
|
|
status VARCHAR(32) NOT NULL DEFAULT 'draft',
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
KEY idx_game_accounts_owner_id (owner_id),
|
|
KEY idx_game_accounts_filter (game_name, server_region, login_platform)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE rental_listings (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
account_id BIGINT UNSIGNED NOT NULL,
|
|
owner_id BIGINT UNSIGNED NOT NULL,
|
|
price_hourly DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
|
price_daily DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
|
price_weekly DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
|
deposit_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
|
in_transaction TINYINT(1) NOT NULL DEFAULT 0,
|
|
status VARCHAR(32) NOT NULL DEFAULT 'draft',
|
|
review_status VARCHAR(32) NOT NULL DEFAULT 'none',
|
|
review_reason VARCHAR(255) NOT NULL DEFAULT '',
|
|
published_at DATETIME NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
KEY idx_rental_listings_account_id (account_id),
|
|
KEY idx_rental_listings_owner_id (owner_id),
|
|
KEY idx_rental_listings_filter (status, review_status, price_hourly)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE rental_orders (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
order_no VARCHAR(64) NOT NULL,
|
|
listing_id BIGINT UNSIGNED NOT NULL,
|
|
account_id BIGINT UNSIGNED NOT NULL,
|
|
owner_id BIGINT UNSIGNED NOT NULL,
|
|
renter_id BIGINT UNSIGNED NOT NULL,
|
|
rent_start_at DATETIME NULL,
|
|
rent_end_at DATETIME NULL,
|
|
rent_hours INT NOT NULL,
|
|
rent_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
|
deposit_amount DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
|
platform_fee DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
|
account_snapshot JSON NULL,
|
|
status VARCHAR(32) NOT NULL DEFAULT 'pending_confirm',
|
|
handoff_status VARCHAR(32) NOT NULL DEFAULT 'none',
|
|
settlement_status VARCHAR(32) NOT NULL DEFAULT 'unsettled',
|
|
owner_settled_at DATETIME NULL,
|
|
settled_at DATETIME NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uk_rental_orders_order_no (order_no),
|
|
KEY idx_rental_orders_renter_status (renter_id, status),
|
|
KEY idx_rental_orders_owner_status (owner_id, status),
|
|
KEY idx_rental_orders_listing_id (listing_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE handoff_records (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
order_id BIGINT UNSIGNED NOT NULL,
|
|
from_user_id BIGINT UNSIGNED NOT NULL,
|
|
to_user_id BIGINT UNSIGNED NOT NULL,
|
|
type VARCHAR(32) NOT NULL,
|
|
content TEXT NULL,
|
|
attachment_urls JSON NULL,
|
|
confirmed_by_renter_at DATETIME NULL,
|
|
confirmed_by_owner_at DATETIME NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
KEY idx_handoff_records_order_id (order_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE wallet_accounts (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
available_balance DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
|
frozen_balance DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
|
status VARCHAR(32) NOT NULL DEFAULT 'active',
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uk_wallet_accounts_user_id (user_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE wallet_ledger (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
ledger_no VARCHAR(64) NOT NULL,
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
order_id BIGINT UNSIGNED NULL,
|
|
direction VARCHAR(16) NOT NULL,
|
|
amount DECIMAL(12,2) NOT NULL,
|
|
balance_after DECIMAL(12,2) NOT NULL,
|
|
balance_type VARCHAR(32) NOT NULL,
|
|
biz_type VARCHAR(32) NOT NULL,
|
|
biz_no VARCHAR(64) NOT NULL,
|
|
remark VARCHAR(255) NOT NULL DEFAULT '',
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uk_wallet_ledger_ledger_no (ledger_no),
|
|
KEY idx_wallet_ledger_user_created (user_id, created_at),
|
|
KEY idx_wallet_ledger_biz (biz_type, biz_no)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE disputes (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
order_id BIGINT UNSIGNED NOT NULL,
|
|
initiator_id BIGINT UNSIGNED NOT NULL,
|
|
target_user_id BIGINT UNSIGNED NOT NULL,
|
|
type VARCHAR(32) NOT NULL,
|
|
status VARCHAR(32) NOT NULL DEFAULT 'open',
|
|
description TEXT NULL,
|
|
evidence_urls JSON NULL,
|
|
arbitration_result VARCHAR(32) NOT NULL DEFAULT '',
|
|
arbitration_remark TEXT NULL,
|
|
handled_by BIGINT UNSIGNED NULL,
|
|
handled_at DATETIME NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
KEY idx_disputes_order_id (order_id),
|
|
KEY idx_disputes_status (status)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE notifications (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
user_id BIGINT UNSIGNED NOT NULL,
|
|
type VARCHAR(32) NOT NULL,
|
|
title VARCHAR(128) NOT NULL,
|
|
content TEXT NULL,
|
|
biz_type VARCHAR(32) NOT NULL DEFAULT '',
|
|
biz_id BIGINT UNSIGNED NULL,
|
|
read_at DATETIME NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
KEY idx_notifications_user_read_created (user_id, read_at, created_at)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE audit_logs (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
actor_type VARCHAR(32) NOT NULL,
|
|
actor_id BIGINT UNSIGNED NOT NULL,
|
|
action VARCHAR(64) NOT NULL,
|
|
biz_type VARCHAR(32) NOT NULL,
|
|
biz_id BIGINT UNSIGNED NULL,
|
|
ip VARCHAR(64) NOT NULL DEFAULT '',
|
|
user_agent VARCHAR(512) NOT NULL DEFAULT '',
|
|
detail JSON NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
KEY idx_audit_logs_actor_created (actor_id, created_at),
|
|
KEY idx_audit_logs_biz (biz_type, biz_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE admin_users (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
username VARCHAR(64) NOT NULL,
|
|
password_hash VARCHAR(255) NOT NULL,
|
|
nickname VARCHAR(64) NOT NULL DEFAULT '',
|
|
status VARCHAR(32) NOT NULL DEFAULT 'active',
|
|
last_login_at DATETIME NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uk_admin_users_username (username)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE roles (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
code VARCHAR(64) NOT NULL,
|
|
name VARCHAR(64) NOT NULL,
|
|
description VARCHAR(255) NOT NULL DEFAULT '',
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uk_roles_code (code)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE permissions (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
code VARCHAR(128) NOT NULL,
|
|
name VARCHAR(64) NOT NULL,
|
|
resource VARCHAR(128) NOT NULL,
|
|
action VARCHAR(64) NOT NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uk_permissions_code (code)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE admin_user_roles (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
admin_user_id BIGINT UNSIGNED NOT NULL,
|
|
role_id BIGINT UNSIGNED NOT NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uk_admin_user_roles_user_role (admin_user_id, role_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE role_permissions (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
role_id BIGINT UNSIGNED NOT NULL,
|
|
permission_id BIGINT UNSIGNED NOT NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uk_role_permissions_role_permission (role_id, permission_id)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
CREATE TABLE system_configs (
|
|
id BIGINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
|
|
`key` VARCHAR(128) NOT NULL,
|
|
`value` TEXT NOT NULL,
|
|
description VARCHAR(255) NOT NULL DEFAULT '',
|
|
updated_by BIGINT UNSIGNED NULL,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
UNIQUE KEY uk_system_configs_key (`key`)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|