115 lines
4.6 KiB
SQL
115 lines
4.6 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 admins (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
username VARCHAR(150) UNIQUE NOT NULL,
|
|
password VARCHAR(255) NOT NULL,
|
|
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, -- 1: Always Win, -1: Always Loss, 0: Normal
|
|
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',
|
|
contact_email VARCHAR(100) DEFAULT 'support@example.com',
|
|
deposit_address VARCHAR(255) DEFAULT 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t',
|
|
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) DEFAULT 0,
|
|
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 'BTCUSDT',
|
|
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, contact_email, deposit_address) VALUES ('BitCrypto', 'support@bitcrypto.com', 'TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t');
|
|
INSERT INTO admins (username, password) VALUES ('admin', '$2y$10$vK6.O/M57M.n5oYvT6pXve/tE6Yk.7Zg8XfVv0VzP2/k1e7Y6oM5e'); -- password: admin
|
|
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),
|
|
('ADAUSDT', 'Cardano', 'https://cryptologos.cc/logos/cardano-ada-logo.png', 0.5, 3.5),
|
|
('SOLUSDT', 'Solana', 'https://cryptologos.cc/logos/solana-sol-logo.png', 100.0, 5.0),
|
|
('DOGEUSDT', 'Dogecoin', 'https://cryptologos.cc/logos/dogecoin-doge-logo.png', 0.08, -2.0);
|