35249-vm/db/schema.sql
Flatlogic Bot f2abc84982 1.0
2025-10-26 12:26:57 +00:00

100 lines
3.9 KiB
SQL

-- Initial Schema for P2P Crypto Exchange Bot
CREATE TABLE IF NOT EXISTS `users` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`telegram_id` BIGINT UNIQUE NOT NULL,
`nickname` VARCHAR(18) UNIQUE NOT NULL,
`username` VARCHAR(255),
`language` VARCHAR(10) DEFAULT 'en',
`phone_number` VARCHAR(20),
`is_verified` BOOLEAN DEFAULT FALSE,
`rating` FLOAT DEFAULT 5.0,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`role` ENUM('user', 'admin') DEFAULT 'user'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `wallets` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NOT NULL,
`currency` VARCHAR(10) NOT NULL,
`available` DECIMAL(20, 8) DEFAULT 0.0,
`reserved` DECIMAL(20, 8) DEFAULT 0.0,
UNIQUE KEY `user_currency` (`user_id`, `currency`),
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `ads` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NOT NULL,
`ad_type` ENUM('SELL', 'BUY') NOT NULL,
`currency` VARCHAR(10) NOT NULL DEFAULT 'TON',
`payment_currency` VARCHAR(10) NOT NULL DEFAULT 'RUB',
`price_type` ENUM('FIXED', 'FORMULA') NOT NULL,
`fixed_price` DECIMAL(20, 2) DEFAULT NULL,
`formula_add` DECIMAL(20, 2) DEFAULT NULL,
`min_amount` DECIMAL(20, 8) NOT NULL,
`max_amount` DECIMAL(20, 8) NOT NULL,
`available_amount` DECIMAL(20, 8) NOT NULL,
`bank_name` VARCHAR(255) NOT NULL,
`bank_details` TEXT,
`comment` TEXT,
`start_time` TIME,
`end_time` TIME,
`status` ENUM('ACTIVE', 'PAUSED', 'CLOSED') DEFAULT 'ACTIVE',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `orders` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`ad_id` INT NOT NULL,
`buyer_id` INT NOT NULL,
`seller_id` INT NOT NULL,
`amount_crypto` DECIMAL(20, 8) NOT NULL,
`amount_fiat` DECIMAL(20, 2) NOT NULL,
`escrow_fee` DECIMAL(20, 8) DEFAULT 0.0,
`status` ENUM('PENDING_CONFIRMATION', 'AWAITING_PAYMENT', 'AWAITING_SELLER_CONFIRMATION', 'COMPLETED', 'CANCELED', 'DISPUTED') NOT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (`ad_id`) REFERENCES `ads`(`id`),
FOREIGN KEY (`buyer_id`) REFERENCES `users`(`id`),
FOREIGN KEY (`seller_id`) REFERENCES `users`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `transactions` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`user_id` INT NOT NULL,
`order_id` INT,
`type` ENUM('DEPOSIT', 'WITHDRAW', 'HOLD', 'RELEASE', 'TRANSFER', 'FEE', 'DISPUTE_REFUND') NOT NULL,
`currency` VARCHAR(10) NOT NULL,
`amount` DECIMAL(20, 8) NOT NULL,
`description` VARCHAR(255),
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`user_id`) REFERENCES `users`(`id`),
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `disputes` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`order_id` INT NOT NULL,
`created_by_id` INT NOT NULL,
`reason` TEXT,
`status` ENUM('OPEN', 'RESOLVED_BUYER', 'RESOLVED_SELLER', 'RESOLVED_SPLIT') DEFAULT 'OPEN',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`),
FOREIGN KEY (`created_by_id`) REFERENCES `users`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS `messages` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`order_id` INT NOT NULL,
`sender_id` INT NOT NULL,
`receiver_id` INT NOT NULL,
`message` TEXT NOT NULL,
`is_read` BOOLEAN DEFAULT FALSE,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`order_id`) REFERENCES `orders`(`id`),
FOREIGN KEY (`sender_id`) REFERENCES `users`(`id`),
FOREIGN KEY (`receiver_id`) REFERENCES `users`(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;