Files
telepost/plans/phase1_plan.md
2026-01-18 21:01:43 +03:00

5.6 KiB
Raw Permalink Blame History

План реализации первого этапа 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

Требуемые зависимости

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