Расширена схема под баланс рефералку и автовыдачу
Этот коммит содержится в:
+107
-11
@@ -15,7 +15,13 @@ CREATE TABLE IF NOT EXISTS bots (
|
|||||||
webhook_secret VARCHAR(64) NOT NULL UNIQUE,
|
webhook_secret VARCHAR(64) NOT NULL UNIQUE,
|
||||||
status ENUM('active','paused','error') NOT NULL DEFAULT 'paused',
|
status ENUM('active','paused','error') NOT NULL DEFAULT 'paused',
|
||||||
welcome_text TEXT DEFAULT NULL,
|
welcome_text TEXT DEFAULT NULL,
|
||||||
|
support_text TEXT DEFAULT NULL,
|
||||||
pay_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,
|
min_add INT NOT NULL DEFAULT 1,
|
||||||
max_add INT NOT NULL DEFAULT 19,
|
max_add INT NOT NULL DEFAULT 19,
|
||||||
order_ttl_minutes INT NOT NULL DEFAULT 30,
|
order_ttl_minutes INT NOT NULL DEFAULT 30,
|
||||||
@@ -30,12 +36,30 @@ CREATE TABLE IF NOT EXISTS bot_users (
|
|||||||
username VARCHAR(190) DEFAULT NULL,
|
username VARCHAR(190) DEFAULT NULL,
|
||||||
first_name VARCHAR(190) DEFAULT NULL,
|
first_name VARCHAR(190) DEFAULT NULL,
|
||||||
last_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 VARCHAR(80) DEFAULT NULL,
|
||||||
state_data JSON DEFAULT NULL,
|
state_data JSON DEFAULT NULL,
|
||||||
last_seen_at TIMESTAMP NULL DEFAULT NULL,
|
last_seen_at TIMESTAMP NULL DEFAULT NULL,
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
UNIQUE KEY uniq_bot_tg (bot_id, telegram_id),
|
UNIQUE KEY uniq_bot_tg (bot_id, telegram_id),
|
||||||
KEY idx_bot_users_bot (bot_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;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS shop_cities (
|
CREATE TABLE IF NOT EXISTS shop_cities (
|
||||||
@@ -64,6 +88,8 @@ CREATE TABLE IF NOT EXISTS shop_products (
|
|||||||
bot_id INT NOT NULL,
|
bot_id INT NOT NULL,
|
||||||
name VARCHAR(190) NOT NULL,
|
name VARCHAR(190) NOT NULL,
|
||||||
description TEXT DEFAULT 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,
|
sort_order INT NOT NULL DEFAULT 100,
|
||||||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
@@ -75,7 +101,7 @@ CREATE TABLE IF NOT EXISTS shop_product_variants (
|
|||||||
bot_id INT NOT NULL,
|
bot_id INT NOT NULL,
|
||||||
product_id INT NOT NULL,
|
product_id INT NOT NULL,
|
||||||
name VARCHAR(190) NOT NULL,
|
name VARCHAR(190) NOT NULL,
|
||||||
price INT NOT NULL,
|
price DECIMAL(12,2) NOT NULL,
|
||||||
stock INT DEFAULT NULL,
|
stock INT DEFAULT NULL,
|
||||||
sort_order INT NOT NULL DEFAULT 100,
|
sort_order INT NOT NULL DEFAULT 100,
|
||||||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||||||
@@ -83,18 +109,40 @@ CREATE TABLE IF NOT EXISTS shop_product_variants (
|
|||||||
KEY idx_variants_bot_product (bot_id, product_id)
|
KEY idx_variants_bot_product (bot_id, product_id)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) 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 (
|
CREATE TABLE IF NOT EXISTS shop_payment_methods (
|
||||||
id INT AUTO_INCREMENT PRIMARY KEY,
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
||||||
bot_id INT NOT NULL,
|
bot_id INT NOT NULL,
|
||||||
title VARCHAR(190) NOT NULL,
|
title VARCHAR(190) NOT NULL,
|
||||||
type ENUM('card','sbp','bank') NOT NULL DEFAULT 'card',
|
type ENUM('card','sbp','bank','bitcoin') NOT NULL DEFAULT 'card',
|
||||||
bank_name VARCHAR(190) DEFAULT NULL,
|
bank_name VARCHAR(190) DEFAULT NULL,
|
||||||
card_number VARCHAR(80) DEFAULT NULL,
|
card_number VARCHAR(80) DEFAULT NULL,
|
||||||
recipient_name VARCHAR(190) DEFAULT NULL,
|
recipient_name VARCHAR(190) DEFAULT NULL,
|
||||||
sbp_phone VARCHAR(80) DEFAULT NULL,
|
sbp_phone VARCHAR(80) DEFAULT NULL,
|
||||||
min_amount INT DEFAULT NULL,
|
btc_address VARCHAR(190) DEFAULT NULL,
|
||||||
max_amount INT DEFAULT NULL,
|
min_amount DECIMAL(12,2) DEFAULT NULL,
|
||||||
daily_limit INT 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_online TINYINT(1) NOT NULL DEFAULT 1,
|
||||||
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
is_active TINYINT(1) NOT NULL DEFAULT 1,
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
@@ -110,17 +158,52 @@ CREATE TABLE IF NOT EXISTS shop_orders (
|
|||||||
district_id INT NOT NULL,
|
district_id INT NOT NULL,
|
||||||
product_id INT NOT NULL,
|
product_id INT NOT NULL,
|
||||||
variant_id INT NOT NULL,
|
variant_id INT NOT NULL,
|
||||||
|
stock_item_id BIGINT DEFAULT NULL,
|
||||||
payment_method_id INT DEFAULT NULL,
|
payment_method_id INT DEFAULT NULL,
|
||||||
base_amount INT NOT NULL,
|
payment_type ENUM('balance','card','bitcoin') DEFAULT NULL,
|
||||||
random_increment INT NOT NULL DEFAULT 0,
|
base_amount DECIMAL(12,2) NOT NULL,
|
||||||
final_amount INT NOT NULL,
|
random_increment DECIMAL(12,2) NOT NULL DEFAULT 0.00,
|
||||||
status ENUM('waiting_pay','paid','rejected','expired','cancelled') NOT NULL DEFAULT 'waiting_pay',
|
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,
|
expires_at DATETIME NOT NULL,
|
||||||
paid_at DATETIME DEFAULT NULL,
|
paid_at DATETIME DEFAULT NULL,
|
||||||
|
delivered_at DATETIME DEFAULT NULL,
|
||||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
updated_at TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
updated_at TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
||||||
KEY idx_orders_bot_status (bot_id, status),
|
KEY idx_orders_bot_status (bot_id, status),
|
||||||
KEY idx_orders_amount (bot_id, final_amount, 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;
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS telegram_updates (
|
CREATE TABLE IF NOT EXISTS telegram_updates (
|
||||||
@@ -132,6 +215,19 @@ CREATE TABLE IF NOT EXISTS telegram_updates (
|
|||||||
KEY idx_tg_updates_bot (bot_id)
|
KEY idx_tg_updates_bot (bot_id)
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
) 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 (
|
CREATE TABLE IF NOT EXISTS admin_logs (
|
||||||
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
||||||
user_id INT DEFAULT NULL,
|
user_id INT DEFAULT NULL,
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user