72 lines
5.2 KiB
SQL
72 lines
5.2 KiB
SQL
-- 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; |