From 5bc27b58f39d421a026520787599517401e4cdc7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80?= <78488229+viktor138irk@users.noreply.github.com> Date: Mon, 18 May 2026 08:47:11 +0900 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=81=D1=85=D0=B5=D0=BC=D1=83=20=D0=B1=D0=B0=D0=B7=D1=8B=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BC=D1=83=D0=BB=D1=8C=D1=82=D0=B8=D0=B1?= =?UTF-8?q?=D0=BE=D1=82-=D0=BC=D0=B0=D0=B3=D0=B0=D0=B7=D0=B8=D0=BD=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database/schema.sql | 141 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 database/schema.sql diff --git a/database/schema.sql b/database/schema.sql new file mode 100644 index 0000000..c1a5231 --- /dev/null +++ b/database/schema.sql @@ -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;