-- SQL скрипт для создания таблицы пользователей -- Сохраняет все данные о пользователе, передаваемые Telegram через aiogram CREATE TABLE bot_users ( -- Основные данные пользователя Telegram id NUMBER(19) PRIMARY KEY, -- Telegram user ID (64-bit integer) first_name VARCHAR2(256) NOT NULL, -- Имя пользователя last_name VARCHAR2(256), -- Фамилия пользователя (опционально) username VARCHAR2(128), -- Username (опционально) language_code VARCHAR2(10), -- Код языка (IETF language tag) -- Флаги статуса пользователя is_bot NUMBER(1) DEFAULT 0 NOT NULL, -- Является ли пользователь ботом is_premium NUMBER(1) DEFAULT 0, -- Telegram Premium пользователь added_to_attachment_menu NUMBER(1) DEFAULT 0, -- Добавил ли бота в меню вложений -- Системные поля для аудита first_interaction_date DATE DEFAULT SYSDATE NOT NULL, -- Дата первого взаимодействия last_interaction_date DATE DEFAULT SYSDATE NOT NULL, -- Дата последнего взаимодействия interaction_count NUMBER(10) DEFAULT 1 NOT NULL, -- Количество взаимодействий -- Дополнительные бизнес-поля is_active NUMBER(1) DEFAULT 1 NOT NULL, -- Активен ли пользователь is_blocked NUMBER(1) DEFAULT 0 NOT NULL, -- Заблокирован ли пользователь registration_source VARCHAR2(50) DEFAULT 'bot', -- Источник регистрации -- Финансовые данные total_payments NUMBER(10,2) DEFAULT 0, -- Общая сумма платежей в звездах successful_payments_count NUMBER(8) DEFAULT 0, -- Количество успешных платежей -- Системные поля created_at DATE DEFAULT SYSDATE NOT NULL, updated_at DATE DEFAULT SYSDATE NOT NULL ); -- Создание индексов для оптимизации поиска CREATE INDEX idx_bot_users_username ON bot_users(username); CREATE INDEX idx_bot_users_language ON bot_users(language_code); CREATE INDEX idx_bot_users_last_interaction ON bot_users(last_interaction_date); CREATE INDEX idx_bot_users_is_premium ON bot_users(is_premium); CREATE INDEX idx_bot_users_created_at ON bot_users(created_at); -- Создание комментариев к таблице и полям COMMENT ON TABLE bot_users IS 'Таблица пользователей Telegram бота с полными данными KYC'; COMMENT ON COLUMN bot_users.id IS 'Уникальный идентификатор пользователя Telegram (64-bit)'; COMMENT ON COLUMN bot_users.first_name IS 'Имя пользователя в Telegram'; COMMENT ON COLUMN bot_users.last_name IS 'Фамилия пользователя в Telegram (опционально)'; COMMENT ON COLUMN bot_users.username IS 'Username пользователя в Telegram (опционально)'; COMMENT ON COLUMN bot_users.language_code IS 'Код языка пользователя (IETF language tag)'; COMMENT ON COLUMN bot_users.is_bot IS 'Флаг: является ли пользователь ботом (0/1)'; COMMENT ON COLUMN bot_users.is_premium IS 'Флаг: Telegram Premium пользователь (0/1)'; COMMENT ON COLUMN bot_users.added_to_attachment_menu IS 'Флаг: добавил ли бота в меню вложений (0/1)'; COMMENT ON COLUMN bot_users.first_interaction_date IS 'Дата первого взаимодействия с ботом'; COMMENT ON COLUMN bot_users.last_interaction_date IS 'Дата последнего взаимодействия с ботом'; COMMENT ON COLUMN bot_users.interaction_count IS 'Общее количество взаимодействий с ботом'; COMMENT ON COLUMN bot_users.is_active IS 'Флаг: активен ли пользователь (0/1)'; COMMENT ON COLUMN bot_users.is_blocked IS 'Флаг: заблокирован ли пользователь (0/1)'; COMMENT ON COLUMN bot_users.registration_source IS 'Источник регистрации пользователя'; COMMENT ON COLUMN bot_users.total_payments IS 'Общая сумма платежей пользователя в Telegram Stars'; COMMENT ON COLUMN bot_users.successful_payments_count IS 'Количество успешных платежей'; -- Создание триггера для автоматического обновления updated_at CREATE OR REPLACE TRIGGER trg_bot_users_updated_at BEFORE UPDATE ON bot_users FOR EACH ROW BEGIN :NEW.updated_at := SYSDATE; END; / -- Создание последовательности для системных нужд (если потребуется) CREATE SEQUENCE seq_bot_users_internal START WITH 1 INCREMENT BY 1 NOCACHE;