Добавил схему базы для мультибот-магазина
Этот коммит содержится в:
@@ -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;
|
||||
Ссылка в новой задаче
Block a user