# План реализации первого этапа MVP TelePost Clone ## Цель первого этапа Реализовать базовую аутентификацию и структуру приложения, включая: 1. Аутентификацию через Telegram Login Widget 2. Создание основной структуры проекта 3. Реализацию модели пользователя 4. Маршрут для входа через Telegram 5. Проверку аутентичности данных от Telegram 6. Генерацию JWT-токена ## Структура проекта ``` telepost-clone/ ├── backend/ # FastAPI приложение │ ├── app/ │ │ ├── api/ # API маршруты │ │ ├── models/ # ORM модели │ │ ├── schemas/ # Pydantic схемы │ │ ├── services/ # Бизнес-логика │ │ ├── database/ # Настройки базы данных │ │ ├── auth/ # Аутентификация │ │ ├── integrations/ # Интеграции с внешними сервисами │ │ └── utils/ # Утилиты │ ├── migrations/ # Миграции базы данных │ ├── tests/ # Тесты │ └── requirements.txt # Зависимости ├── frontend/ # SvelteKit приложение │ ├── src/ │ │ ├── routes/ # Страницы │ │ ├── components/ # Компоненты │ │ ├── lib/ # Библиотеки │ │ ├── stores/ # Svelte stores │ │ └── app.html # Базовый шаблон │ ├── static/ # Статические файлы │ └── package.json # Зависимости ├── docs/ # Документация └── docker-compose.yml # Оркестрация ``` ## Необходимые файлы для реализации первого этапа ### Backend #### 1. Зависимости - `backend/requirements.txt` #### 2. Конфигурация базы данных - `backend/app/database/database.py` - `backend/app/database/config.py` #### 3. Модели - `backend/app/models/user.py` - `backend/app/models/base.py` #### 4. Схемы (Pydantic) - `backend/app/schemas/user.py` - `backend/app/schemas/token.py` #### 5. Аутентификация - `backend/app/auth/telegram_auth.py` - реализация аутентификации через Telegram - `backend/app/auth/jwt.py` - работа с JWT токенами - `backend/app/auth/utils.py` - вспомогательные функции аутентификации #### 6. API маршруты - `backend/app/api/v1/endpoints/auth.py` - маршруты аутентификации - `backend/app/api/v1/routers.py` - регистрация роутеров #### 7. Утилиты - `backend/app/utils/security.py` - функции безопасности - `backend/app/utils/telegram.py` - вспомогательные функции для работы с Telegram API #### 8. Основной файл приложения - `backend/main.py` ### Frontend Для первого этапа фронтенд будет минимальным: - `frontend/package.json` - `frontend/src/routes/login/+page.svelte` - страница входа с Telegram widget - `frontend/src/lib/stores/auth.js` - store для аутентификации ## Реализация аутентификации через Telegram ### Шаги аутентификации: 1. Пользователь нажимает кнопку "Войти через Telegram" 2. Используется Telegram Login Widget для получения данных пользователя 3. Данные отправляются на сервер для проверки аутентичности 4. Сервер проверяет подлинность данных с помощью хэша 5. При успешной проверке создается/обновляется пользователь в базе 6. Генерируется JWT-токен 7. Токен возвращается клиенту ### Проверка аутентичности данных от Telegram: 1. Telegram передает параметры: id, first_name, last_name, username, photo_url, auth_date, hash 2. Необходимо проверить hash, чтобы убедиться, что данные действительно от Telegram 3. Для этого: - Собрать все параметры кроме hash в алфавитном порядке - Объединить их в строку в формате "key=value" с новыми строками между парами - Вычислить SHA256 хэш от токена бота - Использовать этот хэш как ключ для HMAC-SHA256 подписи строки параметров - Преобразовать результат в шестнадцатеричную строку - Сравнить полученный хэш с тем, что прислал Telegram ## Требуемые зависимости ```txt fastapi==0.104.1 uvicorn==0.24.0 sqlalchemy==2.0.23 alembic==1.13.1 psycopg2-binary==2.9.9 python-jose[cryptography]==3.3.0 passlib[bcrypt]==1.7.4 python-multipart==0.0.6 requests==2.31.0 pydantic==2.5.0 pydantic-settings==2.1.0 redis==5.0.1 cachetools==5.3.2