38239-vm/schema.sql
2026-02-07 05:53:52 +00:00

102 lines
3.7 KiB
SQL

CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(150) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
email VARCHAR(255),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS accounts (
id INT AUTO_INCREMENT PRIMARY KEY,
user_id INT NOT NULL,
uid VARCHAR(6) UNIQUE NOT NULL,
account_type ENUM('SIMULATED', 'REAL') DEFAULT 'SIMULATED',
balance DECIMAL(30, 8) DEFAULT 0,
frozen_balance DECIMAL(30, 8) DEFAULT 0,
credit_score INT DEFAULT 80,
kyc_status ENUM('UNVERIFIED', 'PENDING', 'VERIFIED', 'REJECTED') DEFAULT 'UNVERIFIED',
win_loss_control INT DEFAULT 0,
language VARCHAR(10) DEFAULT 'zh-hans',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS site_settings (
id INT AUTO_INCREMENT PRIMARY KEY,
site_name VARCHAR(100) DEFAULT 'BitCrypto',
customer_service_url TEXT,
terms_content TEXT,
privacy_content TEXT,
is_pinning_active BOOLEAN DEFAULT FALSE
);
CREATE TABLE IF NOT EXISTS cryptocurrencies (
id INT AUTO_INCREMENT PRIMARY KEY,
symbol VARCHAR(20) UNIQUE NOT NULL,
name VARCHAR(100) NOT NULL,
icon_url TEXT,
current_price DECIMAL(30, 8) DEFAULT 0,
manual_price DECIMAL(30, 8),
change_24h DECIMAL(10, 2) DEFAULT 0,
is_active BOOLEAN DEFAULT TRUE
);
CREATE TABLE IF NOT EXISTS assets (
id INT AUTO_INCREMENT PRIMARY KEY,
account_id INT NOT NULL,
currency VARCHAR(10) NOT NULL,
balance DECIMAL(30, 8) DEFAULT 0,
frozen DECIMAL(30, 8) DEFAULT 0,
UNIQUE KEY account_currency (account_id, currency),
FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS orders (
id INT AUTO_INCREMENT PRIMARY KEY,
account_id INT NOT NULL,
symbol VARCHAR(20) DEFAULT 'BTC-USDT',
trade_type ENUM('SPOT', 'CONTRACT') DEFAULT 'SPOT',
side ENUM('BUY', 'SELL') NOT NULL,
order_type ENUM('LIMIT', 'MARKET') NOT NULL,
price DECIMAL(30, 8),
amount DECIMAL(30, 8) NOT NULL,
total_usdt DECIMAL(30, 8),
leverage INT DEFAULT 1,
status ENUM('PENDING', 'PARTIALLY_FILLED', 'FILLED', 'CANCELED') DEFAULT 'PENDING',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS positions (
id INT AUTO_INCREMENT PRIMARY KEY,
account_id INT NOT NULL,
symbol VARCHAR(20) NOT NULL,
side ENUM('LONG', 'SHORT') NOT NULL,
leverage INT DEFAULT 20,
entry_price DECIMAL(30, 8) NOT NULL,
lots DECIMAL(30, 8) NOT NULL,
margin DECIMAL(30, 8) NOT NULL,
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE
);
CREATE TABLE IF NOT EXISTS transactions (
id INT AUTO_INCREMENT PRIMARY KEY,
account_id INT NOT NULL,
transaction_type ENUM('deposit', 'withdraw') NOT NULL,
currency VARCHAR(10) DEFAULT 'USDT',
amount DECIMAL(30, 8) DEFAULT 0,
tx_hash VARCHAR(255),
status ENUM('pending', 'completed', 'failed') DEFAULT 'pending',
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (account_id) REFERENCES accounts(id) ON DELETE CASCADE
);
-- Seed initial data
INSERT INTO site_settings (site_name) VALUES ('BitCrypto');
INSERT INTO cryptocurrencies (symbol, name, icon_url, current_price, change_24h) VALUES
('BTCUSDT', 'Bitcoin', 'https://cryptologos.cc/logos/bitcoin-btc-logo.png', 45000.00, 1.2),
('ETHUSDT', 'Ethereum', 'https://cryptologos.cc/logos/ethereum-eth-logo.png', 2500.00, -0.5),
('BNBUSDT', 'Binance Coin', 'https://cryptologos.cc/logos/binance-coin-bnb-logo.png', 300.00, 2.1);