Добавил схему базы для мультибот-магазина

Этот коммит содержится в:
Виктор
2026-05-18 08:47:11 +09:00
родитель a2e70f6308
Коммит 5bc27b58f3
+141
Просмотреть файл
@@ -0,0 +1,141 @@
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,
pay_text TEXT DEFAULT NULL,
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,
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)
) 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,
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 INT 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_payment_methods (
id INT AUTO_INCREMENT PRIMARY KEY,
bot_id INT NOT NULL,
title VARCHAR(190) NOT NULL,
type ENUM('card','sbp','bank') 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,
min_amount INT DEFAULT NULL,
max_amount INT DEFAULT NULL,
daily_limit INT 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,
payment_method_id INT DEFAULT NULL,
base_amount INT NOT NULL,
random_increment INT NOT NULL DEFAULT 0,
final_amount INT NOT NULL,
status ENUM('waiting_pay','paid','rejected','expired','cancelled') NOT NULL DEFAULT 'waiting_pay',
expires_at DATETIME NOT NULL,
paid_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)
) 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 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;