232 lines
8.6 KiB
Markdown
232 lines
8.6 KiB
Markdown
# Telegram Tinder Bot - Архитектура и Технические Детали
|
||
|
||
## 🏗️ Архитектура Проекта
|
||
|
||
### Структура Директорий
|
||
```
|
||
telegram-tinder-bot/
|
||
├── src/
|
||
│ ├── bot.ts # Основной файл бота
|
||
│ ├── controllers/ # Контроллеры для бизнес-логики
|
||
│ │ ├── matchController.ts
|
||
│ │ ├── profileController.ts
|
||
│ │ └── swipeController.ts
|
||
│ ├── database/ # Работа с базой данных
|
||
│ │ ├── connection.ts
|
||
│ │ └── migrations/init.sql
|
||
│ ├── handlers/ # Обработчики событий Telegram
|
||
│ │ ├── callbackHandlers.ts
|
||
│ │ ├── commandHandlers.ts
|
||
│ │ └── messageHandlers.ts
|
||
│ ├── models/ # Модели данных
|
||
│ │ ├── Match.ts
|
||
│ │ ├── Profile.ts
|
||
│ │ ├── Swipe.ts
|
||
│ │ └── User.ts
|
||
│ ├── services/ # Бизнес-логика
|
||
│ │ ├── matchingService.ts
|
||
│ │ ├── notificationService.ts
|
||
│ │ └── profileService.ts
|
||
│ ├── types/ # TypeScript типы
|
||
│ │ └── index.ts
|
||
│ └── utils/ # Вспомогательные функции
|
||
│ ├── helpers.ts
|
||
│ └── validation.ts
|
||
├── config/ # Конфигурация
|
||
├── logs/ # Логи приложения
|
||
├── uploads/ # Загруженные файлы
|
||
└── dist/ # Скомпилированные JS файлы
|
||
```
|
||
|
||
### Технологический Стек
|
||
|
||
**Backend:**
|
||
- Node.js 18+
|
||
- TypeScript 5.3.2
|
||
- node-telegram-bot-api 0.64.0
|
||
- PostgreSQL 15 с расширением UUID
|
||
- pg (PostgreSQL driver)
|
||
|
||
**Архитектурные Паттерны:**
|
||
- Service-Oriented Architecture (SOA)
|
||
- Model-View-Controller (MVC)
|
||
- Dependency Injection
|
||
- Repository Pattern для работы с данными
|
||
|
||
**DevOps:**
|
||
- Docker & Docker Compose
|
||
- PM2 для управления процессами
|
||
- ESLint + Prettier для качества кода
|
||
- Автоматическая компиляция TypeScript
|
||
|
||
## 🚀 Основные Возможности
|
||
|
||
### 1. Система Регистрации
|
||
- **Многошаговая регистрация** через диалог с ботом
|
||
- **Валидация данных** на каждом этапе
|
||
- **Загрузка фотографий** с проверкой формата
|
||
- **Геолокация** для поиска ближайших пользователей
|
||
|
||
### 2. Алгоритм Matching
|
||
- **Интеллектуальный подбор** на основе:
|
||
- Возраста и гендерных предпочтений
|
||
- Географической близости
|
||
- Общих интересов
|
||
- Исключение уже просмотренных профилей
|
||
|
||
### 3. Система Swipe
|
||
- **Left Swipe** (Pass) - пропустить
|
||
- **Right Swipe** (Like) - понравился
|
||
- **Super Like** - супер лайк (премиум)
|
||
- **Автоматическое создание матчей** при взаимном лайке
|
||
|
||
### 4. Чат Система
|
||
- **Обмен сообщениями** между матчами
|
||
- **Поддержка медиа**: фото, стикеры, GIF
|
||
- **Статус прочтения** сообщений
|
||
- **Уведомления** о новых сообщениях
|
||
|
||
### 5. Модерация и Безопасность
|
||
- **Система жалоб** на неподходящие профили
|
||
- **Блокировка пользователей**
|
||
- **Антиспам защита**
|
||
- **Верификация профилей**
|
||
|
||
## 🗄️ Схема Базы Данных
|
||
|
||
### Основные Таблицы
|
||
|
||
**users** - Пользователи Telegram
|
||
```sql
|
||
- id (UUID, PK)
|
||
- telegram_id (BIGINT, UNIQUE)
|
||
- username, first_name, last_name
|
||
- language_code, is_premium, is_blocked
|
||
- created_at, updated_at
|
||
```
|
||
|
||
**profiles** - Профили для знакомств
|
||
```sql
|
||
- id (UUID, PK)
|
||
- user_id (UUID, FK -> users.id)
|
||
- name, age, gender, looking_for
|
||
- bio, location, latitude, longitude
|
||
- photos[], interests[]
|
||
- education, occupation, height
|
||
- smoking, drinking, relationship_type
|
||
- verification_status, is_active, is_visible
|
||
```
|
||
|
||
**swipes** - История свайпов
|
||
```sql
|
||
- id (UUID, PK)
|
||
- swiper_id (UUID, FK -> users.id)
|
||
- swiped_id (UUID, FK -> users.id)
|
||
- direction ('left'|'right'|'super')
|
||
- created_at
|
||
```
|
||
|
||
**matches** - Пары пользователей
|
||
```sql
|
||
- id (UUID, PK)
|
||
- user1_id, user2_id (UUID, FK -> users.id)
|
||
- status ('active'|'blocked'|'unmatched')
|
||
- matched_at, last_message_at
|
||
```
|
||
|
||
**messages** - Сообщения в чате
|
||
```sql
|
||
- id (UUID, PK)
|
||
- match_id (UUID, FK -> matches.id)
|
||
- sender_id (UUID, FK -> users.id)
|
||
- content, message_type, file_id
|
||
- is_read, created_at
|
||
```
|
||
|
||
### Автоматические Триггеры
|
||
- **Автоматическое создание матчей** при взаимном лайке
|
||
- **Обновление времени** последнего сообщения
|
||
- **Автоинкремент** счетчиков непрочитанных сообщений
|
||
|
||
## 🛠️ API и Интеграции
|
||
|
||
### Telegram Bot API
|
||
- **Webhooks** для продакшена
|
||
- **Polling** для разработки
|
||
- **Inline клавиатуры** для навигации
|
||
- **Callback queries** для интерактивности
|
||
|
||
### Внешние Сервисы (Опционально)
|
||
- **Google Maps API** - для геокодирования
|
||
- **Cloudinary** - для хранения изображений
|
||
- **Redis** - для кэширования сессий
|
||
|
||
## 🔒 Безопасность
|
||
|
||
### Защита Данных
|
||
- **Хеширование** чувствительных данных
|
||
- **SQL Injection** защита через параметризованные запросы
|
||
- **Rate Limiting** для предотвращения спама
|
||
- **Валидация** всех входных данных
|
||
|
||
### Приватность
|
||
- **GDPR совместимость**
|
||
- **Возможность удаления** всех данных
|
||
- **Ограниченная видимость** профилей
|
||
- **Контроль доступа** к персональной информации
|
||
|
||
## 📊 Мониторинг и Логирование
|
||
|
||
### Система Логов
|
||
```typescript
|
||
- Error Logs: Критические ошибки
|
||
- Access Logs: Все запросы к боту
|
||
- Performance Logs: Метрики производительности
|
||
- User Activity: Статистика активности
|
||
```
|
||
|
||
### Метрики
|
||
- **DAU/MAU** - активные пользователи
|
||
- **Match Rate** - процент матчей
|
||
- **Message Volume** - объем сообщений
|
||
- **Conversion Funnel** - воронка регистрации
|
||
|
||
## 🚀 Развертывание
|
||
|
||
### Локальная Разработка
|
||
```bash
|
||
npm install
|
||
npm run dev
|
||
```
|
||
|
||
### Продакшен с Docker
|
||
```bash
|
||
docker-compose up -d
|
||
```
|
||
|
||
### Масштабирование
|
||
- **Horizontal Scaling**: Несколько инстансов бота
|
||
- **Database Sharding**: Разделение пользователей по регионам
|
||
- **CDN**: Для быстрой загрузки изображений
|
||
- **Load Balancer**: Распределение нагрузки
|
||
|
||
## 🔮 Планы Развития
|
||
|
||
### Ближайшие Улучшения
|
||
- [ ] **Video Calls** через Telegram
|
||
- [ ] **Stories** как в Instagram
|
||
- [ ] **Premium подписка** с расширенными возможностями
|
||
- [ ] **AI рекомендации** на основе поведения
|
||
- [ ] **Группы по интересам**
|
||
|
||
### Технические Улучшения
|
||
- [ ] **GraphQL API** для фронтенда
|
||
- [ ] **Machine Learning** для улучшения матчинга
|
||
- [ ] **Real-time notifications** через WebSockets
|
||
- [ ] **Multi-language support**
|
||
- [ ] **A/B тестирование** фич
|
||
|
||
---
|
||
|
||
**Этот проект представляет собой полноценную платформу знакомств внутри Telegram с современной архитектурой и возможностями для масштабирования.**
|