Initial commit

This commit is contained in:
2026-01-18 21:01:43 +03:00
commit 455b6df2ba
3329 changed files with 1143638 additions and 0 deletions
+117
View File
@@ -0,0 +1,117 @@
# План реализации первого этапа 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
+68
View File
@@ -0,0 +1,68 @@
# План реализации второго этапа TelePost Clone
## Цель второго этапа
Реализовать функционал создания и редактирования постов, включая:
1. Создание модели Post в базе данных
2. Создание схем Pydantic для работы с постами
3. Реализацию API маршрутов для CRUD операций над постами
4. Добавление защиты маршрутов с использованием JWT-токенов
5. Реализацию сервисного слоя для бизнес-логики работы с постами
6. Добавление интерфейса на фронтенде для создания и редактирования постов
## Необходимые компоненты
### Backend
#### 1. Модель поста
- `backend/app/models/post.py` - модель SQLAlchemy для постов
#### 2. Схемы Pydantic
- `backend/app/schemas/post.py` - схемы для создания, обновления и чтения постов
#### 3. API маршруты
- `backend/app/api/v1/endpoints/posts.py` - маршруты для работы с постами
- Обновление `backend/app/api/v1/routers.py` для регистрации нового роутера
#### 4. Сервисный слой
- `backend/app/services/post_service.py` - бизнес-логика для работы с постами
#### 5. Обновления существующих компонентов
- `backend/app/api/v1/endpoints/auth.py` - возможно обновление для работы с постами
- `backend/main.py` - добавление зависимостей если нужно
### Frontend
#### 1. Страницы
- `frontend/src/routes/posts/+page.svelte` - страница со списком постов
- `frontend/src/routes/posts/create/+page.svelte` - страница создания поста
- `frontend/src/routes/posts/edit/[id]/+page.svelte` - страница редактирования поста
#### 2. Компоненты
- `frontend/src/lib/components/PostEditor.svelte` - компонент редактора поста
- `frontend/src/lib/components/PostCard.svelte` - компонент карточки поста
#### 3. Stores
- `frontend/src/lib/stores/posts.js` - store для управления состоянием постов
## Требования к модели Post
Модель должна включать:
- id: UUID или Integer (первичный ключ)
- title: строка (заголовок поста)
- content: текст (содержимое поста)
- scheduled_time: DateTime (время публикации, опционально)
- status: строка (черновик, готов к публикации, опубликован и т.д.)
- created_at: DateTime (время создания)
- updated_at: DateTime (время последнего обновления)
- owner_id: Integer (внешний ключ к пользователю)
## Требования к API
- GET /api/v1/posts/ - получить список постов пользователя
- POST /api/v1/posts/ - создать новый пост
- GET /api/v1/posts/{id} - получить конкретный пост
- PUT /api/v1/posts/{id} - обновить пост
- DELETE /api/v1/posts/{id} - удалить пост
- Все маршруты требуют аутентификации через JWT-токен
## Требования к фронтенду
- Страница списка постов с возможностью просмотра, редактирования и удаления
- Страница создания поста с полями для заголовка, содержимого и времени публикации
- Страница редактирования поста
- Защита маршрутов - доступ только для аутентифицированных пользователей