init commit
This commit is contained in:
231
ARCHITECTURE.md
Normal file
231
ARCHITECTURE.md
Normal file
@@ -0,0 +1,231 @@
|
||||
# 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 с современной архитектурой и возможностями для масштабирования.**
|
||||
Reference in New Issue
Block a user