StickerAI-Front/ARCHITECTURE.md
2025-03-13 15:51:19 +03:00

219 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Архитектура Telegram MiniApp для генерации стикеров
## Общее описание
Приложение представляет собой Telegram MiniApp для генерации стикеров из пользовательских изображений. Архитектура построена на принципе разделения клиентской и серверной логики, где все API запросы выполняются через сервер.
## Компоненты системы
```mermaid
graph TD
A[Клиент/MiniApp] --> B[Telegram WebApp API]
A --> C[Ваш сервер]
C --> D[API генерации]
B -- "user_id, username" --> C
C -- "статус, результаты" --> A
```
## API Эндпоинты
### 1. Регистрация пользователя
```http
POST /users
Content-Type: application/json
{
"user_id": 12345,
"username": "john_doe",
"chat_id": 123456789,
"balance": 0
}
Response (201):
{
"user_id": 1,
"username": "john_doe",
"chat_id": 123456789,
"balance": 100
}
```
### 2. Получение информации о пользователе
```http
GET /users
Content-Type: application/json
{
"user_id": "12345"
}
Response (200):
{
"user_id": 12345,
"username": "john_doe",
"chat_id": 123456789,
"balance": 0
}
```
### 3. Генерация изображения
```http
POST /generate_image/{user_id}
Content-Type: multipart/form-data
file: binary
Response (200):
"string" (prompt_id)
```
### 4. Получение списка изображений
```http
GET /images_links/{user_id}
Response (200):
[
{
"id": 0,
"link": "string",
"path": "string",
"prompt_id": "string",
"status": "string",
"created_at": "2025-02-24T13:22:11.690Z"
}
]
```
## Процесс генерации стикера
```mermaid
graph TD
A[Клиент] -->|1. Выбор фото| B[Локальная обработка]
B -->|2. Кроп фото| C[Подготовка данных]
C -->|3. WebApp.sendData| D[Ваш сервер]
D -->|4. Запрос к API| E[API генерации]
E -->|5. Результат| D
D -->|6. Ответ боту| F[Telegram бот]
F -->|7. Уведомление| G[Пользователь]
```
## Структуры данных
### Клиентская часть
```typescript
// Интерфейс для работы с Telegram WebApp
interface WebAppUser {
id: number;
username: string;
// другие поля из WebApp
}
// Запрос на генерацию
interface GenerationRequest {
photo: Blob;
style: string;
userId: number;
username: string;
}
// Результат генерации
interface GenerationResult {
status: 'success' | 'error';
stickerUrl?: string;
error?: string;
}
// Информация об изображении
interface GeneratedImage {
id: number;
link: string;
path: string;
prompt_id: string;
status: string;
created_at: string;
}
```
## Взаимодействие с Telegram WebApp
```typescript
// src/services/webApp.ts
const webAppService = {
// Получение информации о пользователе
getUserInfo(): WebAppUser {
return window.Telegram.WebApp.initDataUnsafe.user;
},
// Показ уведомления
showAlert(message: string): void {
window.Telegram.WebApp.showAlert(message);
},
// Показ подтверждения
showConfirm(message: string): Promise<boolean> {
return window.Telegram.WebApp.showConfirm(message);
},
// Отправка данных на сервер
sendData(data: GenerationRequest): void {
window.Telegram.WebApp.sendData(JSON.stringify(data));
}
};
```
## Процесс обработки изображения
1. **Клиентская часть:**
- Загрузка изображения
- Локальная обработка (кроп, ресайз)
- Подготовка данных для отправки
- Отправка через WebApp.sendData()
2. **Серверная часть:**
- Получение данных от WebApp
- Валидация пользователя
- Проверка баланса
- Отправка запроса на генерацию
- Сохранение результата
- Отправка уведомления через бота
## Обработка ошибок
```typescript
enum ApiErrorType {
USER_NOT_FOUND = 'USER_NOT_FOUND',
VALIDATION_ERROR = 'VALIDATION_ERROR',
NETWORK_ERROR = 'NETWORK_ERROR',
GENERATION_FAILED = 'GENERATION_FAILED'
}
interface ApiError {
type: ApiErrorType;
message: string;
details?: any;
}
```
## Безопасность
1. Все API запросы выполняются только через сервер
2. Клиент не имеет прямого доступа к API генерации
3. Валидация пользователя происходит на сервере
4. Проверка баланса выполняется на сервере перед генерацией
## Оптимизации
1. Локальная обработка изображений перед отправкой
2. Кэширование результатов в галерее
3. Отложенная загрузка изображений
4. Обработка состояний загрузки и ошибок
## Дальнейшее развитие
1. Добавление новых стилей генерации
2. Система рейтинга стикеров
3. Социальные функции (шаринг, коллекции)
4. Интеграция с другими сервисами Telegram