Files

238 строки
8.7 KiB
SQL

CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(120) NOT NULL,
email VARCHAR(190) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
role VARCHAR(50) NOT NULL DEFAULT 'admin',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS bots (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(190) NOT NULL,
username VARCHAR(190) DEFAULT NULL,
token TEXT NOT NULL,
webhook_secret VARCHAR(64) NOT NULL UNIQUE,
status ENUM('active','paused','error') NOT NULL DEFAULT 'paused',
welcome_text TEXT DEFAULT NULL,
support_text TEXT DEFAULT NULL,
pay_text TEXT DEFAULT NULL,
card_pay_enabled TINYINT(1) NOT NULL DEFAULT 1,
btc_pay_enabled TINYINT(1) NOT NULL DEFAULT 0,
balance_pay_enabled TINYINT(1) NOT NULL DEFAULT 1,
referral_enabled TINYINT(1) NOT NULL DEFAULT 1,
referral_percent DECIMAL(8,2) NOT NULL DEFAULT 5.00,
min_add INT NOT NULL DEFAULT 1,
max_add INT NOT NULL DEFAULT 19,
order_ttl_minutes INT NOT NULL DEFAULT 30,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS bot_users (
id INT AUTO_INCREMENT PRIMARY KEY,
bot_id INT NOT NULL,
telegram_id BIGINT NOT NULL,
username VARCHAR(190) DEFAULT NULL,
first_name VARCHAR(190) DEFAULT NULL,
last_name VARCHAR(190) DEFAULT NULL,
referrer_bot_user_id INT DEFAULT NULL,
balance DECIMAL(12,2) NOT NULL DEFAULT 0.00,
state VARCHAR(80) DEFAULT NULL,
state_data JSON DEFAULT NULL,
last_seen_at TIMESTAMP NULL DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
UNIQUE KEY uniq_bot_tg (bot_id, telegram_id),
KEY idx_bot_users_bot (bot_id),
KEY idx_bot_users_referrer (referrer_bot_user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS balance_ledger (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
bot_id INT NOT NULL,
bot_user_id INT NOT NULL,
amount DECIMAL(12,2) NOT NULL,
direction ENUM('credit','debit') NOT NULL,
source ENUM('referral','topup','refund','order','manual') NOT NULL,
order_id INT DEFAULT NULL,
comment TEXT DEFAULT NULL,
created_by INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY idx_balance_user (bot_id, bot_user_id),
KEY idx_balance_order (order_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS shop_cities (
id INT AUTO_INCREMENT PRIMARY KEY,
bot_id INT NOT NULL,
name VARCHAR(190) NOT NULL,
sort_order INT NOT NULL DEFAULT 100,
is_active TINYINT(1) NOT NULL DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY idx_cities_bot (bot_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS shop_districts (
id INT AUTO_INCREMENT PRIMARY KEY,
bot_id INT NOT NULL,
city_id INT NOT NULL,
name VARCHAR(190) NOT NULL,
sort_order INT NOT NULL DEFAULT 100,
is_active TINYINT(1) NOT NULL DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY idx_districts_bot_city (bot_id, city_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS shop_products (
id INT AUTO_INCREMENT PRIMARY KEY,
bot_id INT NOT NULL,
name VARCHAR(190) NOT NULL,
description TEXT DEFAULT NULL,
photo_file_id VARCHAR(255) DEFAULT NULL,
photo_path VARCHAR(255) DEFAULT NULL,
sort_order INT NOT NULL DEFAULT 100,
is_active TINYINT(1) NOT NULL DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY idx_products_bot (bot_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS shop_product_variants (
id INT AUTO_INCREMENT PRIMARY KEY,
bot_id INT NOT NULL,
product_id INT NOT NULL,
name VARCHAR(190) NOT NULL,
price DECIMAL(12,2) NOT NULL,
stock INT DEFAULT NULL,
sort_order INT NOT NULL DEFAULT 100,
is_active TINYINT(1) NOT NULL DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY idx_variants_bot_product (bot_id, product_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS shop_stock_items (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
bot_id INT NOT NULL,
product_id INT NOT NULL,
variant_id INT NOT NULL,
city_id INT DEFAULT NULL,
district_id INT DEFAULT NULL,
title VARCHAR(190) DEFAULT NULL,
delivery_text MEDIUMTEXT DEFAULT NULL,
photo_file_id VARCHAR(255) DEFAULT NULL,
file_id VARCHAR(255) DEFAULT NULL,
status ENUM('available','reserved','delivered','disabled') NOT NULL DEFAULT 'available',
reserved_order_id INT DEFAULT NULL,
delivered_order_id INT DEFAULT NULL,
reserved_at DATETIME DEFAULT NULL,
delivered_at DATETIME DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY idx_stock_lookup (bot_id, variant_id, city_id, district_id, status),
KEY idx_stock_orders (reserved_order_id, delivered_order_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS shop_payment_methods (
id INT AUTO_INCREMENT PRIMARY KEY,
bot_id INT NOT NULL,
title VARCHAR(190) NOT NULL,
type ENUM('card','sbp','bank','bitcoin') NOT NULL DEFAULT 'card',
bank_name VARCHAR(190) DEFAULT NULL,
card_number VARCHAR(80) DEFAULT NULL,
recipient_name VARCHAR(190) DEFAULT NULL,
sbp_phone VARCHAR(80) DEFAULT NULL,
btc_address VARCHAR(190) DEFAULT NULL,
min_amount DECIMAL(12,2) DEFAULT NULL,
max_amount DECIMAL(12,2) DEFAULT NULL,
daily_limit DECIMAL(12,2) DEFAULT NULL,
is_online TINYINT(1) NOT NULL DEFAULT 1,
is_active TINYINT(1) NOT NULL DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY idx_methods_bot (bot_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS shop_orders (
id INT AUTO_INCREMENT PRIMARY KEY,
bot_id INT NOT NULL,
bot_user_id INT NOT NULL,
telegram_id BIGINT NOT NULL,
city_id INT NOT NULL,
district_id INT NOT NULL,
product_id INT NOT NULL,
variant_id INT NOT NULL,
stock_item_id BIGINT DEFAULT NULL,
payment_method_id INT DEFAULT NULL,
payment_type ENUM('balance','card','bitcoin') DEFAULT NULL,
base_amount DECIMAL(12,2) NOT NULL,
random_increment DECIMAL(12,2) NOT NULL DEFAULT 0.00,
final_amount DECIMAL(12,2) NOT NULL,
status ENUM('draft','waiting_payment','payment_review','paid','delivered','cancelled','refunded','expired','rejected') NOT NULL DEFAULT 'waiting_payment',
expires_at DATETIME NOT NULL,
paid_at DATETIME DEFAULT NULL,
delivered_at DATETIME DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
KEY idx_orders_bot_status (bot_id, status),
KEY idx_orders_amount (bot_id, final_amount, status),
KEY idx_orders_user (bot_id, bot_user_id),
KEY idx_orders_stock (stock_item_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS shop_payments (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
bot_id INT NOT NULL,
order_id INT NOT NULL,
bot_user_id INT NOT NULL,
method_id INT DEFAULT NULL,
type ENUM('balance','card','bitcoin') NOT NULL,
amount DECIMAL(12,2) NOT NULL,
status ENUM('created','review','confirmed','rejected','cancelled') NOT NULL DEFAULT 'created',
external_hash VARCHAR(255) DEFAULT NULL,
operator_comment TEXT DEFAULT NULL,
confirmed_by INT DEFAULT NULL,
confirmed_at DATETIME DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY idx_payments_order (order_id),
KEY idx_payments_status (bot_id, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS support_tickets (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
bot_id INT NOT NULL,
bot_user_id INT NOT NULL,
status ENUM('open','answered','closed') NOT NULL DEFAULT 'open',
subject VARCHAR(190) DEFAULT NULL,
last_message TEXT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
KEY idx_support_bot_status (bot_id, status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS telegram_updates (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
bot_id INT DEFAULT NULL,
update_id BIGINT DEFAULT NULL,
payload JSON NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY idx_tg_updates_bot (bot_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS audit_logs (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
bot_id INT DEFAULT NULL,
user_id INT DEFAULT NULL,
bot_user_id INT DEFAULT NULL,
order_id INT DEFAULT NULL,
action VARCHAR(190) NOT NULL,
details TEXT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
KEY idx_audit_bot (bot_id),
KEY idx_audit_order (order_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE IF NOT EXISTS admin_logs (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
user_id INT DEFAULT NULL,
action VARCHAR(190) NOT NULL,
details TEXT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;