# VIP Функции - Документация ## Обзор Реализованы VIP функции с проверкой премиум статуса пользователя в базе данных. ## База данных ### Новые поля в таблице users: - `premium` (BOOLEAN) - флаг премиум статуса - `premium_expires_at` (TIMESTAMP) - дата окончания премиум ## Логика работы ### 1. Кнопка "VIP Поиск" - **Если premium = false**: показывает информацию о премиум и предложение купить - **Если premium = true**: открывает VIP поиск с фильтрами ### 2. VIP Поиск включает: #### Быстрый VIP поиск - Только пользователи с фото - Только онлайн пользователи #### Расширенный поиск - Фильтр по возрасту - Фильтр по городу - Фильтр по целям знакомства - Фильтр по хобби - Фильтр по образу жизни #### Поиск по целям знакомства - Серьезные отношения - Общение и дружба - Развлечения - Деловые знакомства #### Поиск по хобби - Фильтрация по массиву хобби в профиле ## Файлы ### Новые файлы: - `src/services/vipService.ts` - сервис для работы с VIP функциями - `src/controllers/vipController.ts` - контроллер VIP поиска - `src/database/migrations/add_premium_field.sql` - миграция для premium полей ### Изменённые файлы: - `src/handlers/callbackHandlers.ts` - добавлены VIP обработчики ## Методы VipService ### checkPremiumStatus(telegramId: string) Проверяет премиум статус пользователя, автоматически убирает истёкший премиум. ### addPremium(telegramId: string, durationDays: number) Добавляет премиум статус на указанное количество дней. ### vipSearch(telegramId: string, filters: VipSearchFilters) Выполняет VIP поиск с фильтрами (только для премиум пользователей). ### getPremiumFeatures() Возвращает описание премиум возможностей. ## Методы VipController ### showVipSearch(chatId, telegramId) Основной метод - показывает VIP поиск или информацию о премиум. ### performQuickVipSearch(chatId, telegramId) Быстрый VIP поиск (фото + онлайн). ### showDatingGoalSearch(chatId, telegramId) Показывает поиск по целям знакомства. ## Тестирование ### Добавить премиум пользователю: ```sql UPDATE users SET premium = true, premium_expires_at = NOW() + INTERVAL '30 days' WHERE telegram_id = 'YOUR_TELEGRAM_ID'; ``` ### Убрать премиум: ```sql UPDATE users SET premium = false, premium_expires_at = NULL WHERE telegram_id = 'YOUR_TELEGRAM_ID'; ``` ## Callback данные - `get_vip` / `vip_search` - показать VIP поиск - `vip_quick_search` - быстрый VIP поиск - `vip_advanced_search` - расширенный поиск - `vip_dating_goal_search` - поиск по целям - `vip_goal_{goal}` - поиск по конкретной цели - `vip_like_{telegramId}` - VIP лайк - `vip_superlike_{telegramId}` - VIP супер-лайк - `vip_dislike_{telegramId}` - VIP дизлайк ## Безопасность - Все VIP функции проверяют премиум статус - Автоматическое удаление истёкшего премиум - Валидация всех входных данных - Проверка существования пользователей перед операциями