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

623 lines
16 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.

# API Документация
## Обзор
API предоставляет функциональность для работы со стикерами в Telegram, включая генерацию изображений, создание стикерпаков и управление ими. Также API поддерживает отслеживание позиций задач в очереди.
Базовый URL: `http://localhost:8001`
## Эндпоинты
### Проверка работоспособности
#### GET /health
Проверяет работоспособность API.
**Ответ:**
```json
{
"status": "ok"
}
```
### Управление пользователями
#### POST /register
Регистрирует нового пользователя в системе.
**Тело запроса:**
```json
{
"user_id": 123456789,
"username": "example_user",
"chat_id": 123456789,
"balance": 0
}
```
**Параметры:**
- `user_id` (integer, обязательный): Уникальный ID пользователя (например, из Telegram)
- `username` (string, обязательный): Имя пользователя
- `chat_id` (integer, обязательный): ID чата
- `balance` (integer, опциональный, по умолчанию 0): Начальный баланс пользователя
**Ответ (201 Created):**
```json
{
"user_id": 123456789,
"username": "example_user",
"chat_id": 123456789,
"balance": 0
}
```
**Ошибки:**
- 400 Bad Request: Пользователь с таким chat_id уже существует
#### GET /users/{user_id}
Получает информацию о пользователе по его ID.
**Параметры пути:**
- `user_id` (integer, обязательный): ID пользователя
**Ответ (200 OK):**
```json
{
"user_id": 123456789,
"username": "example_user",
"chat_id": 123456789,
"balance": 0
}
```
**Ошибки:**
- 404 Not Found: Пользователь не найден
### Генерация изображений и управление очередью
#### POST /generate_image
Создает задачу на генерацию изображения с использованием ComfyUI.
**Тело запроса:**
```json
{
"user_id": 123456789,
"workflow": {
// Объект workflow для ComfyUI
},
"tag": "image_generation"
}
```
**Параметры:**
- `user_id` (integer, обязательный): ID пользователя
- `workflow` (object, обязательный): Объект workflow для ComfyUI
- `tag` (string, обязательный): Тег для типа задачи (допустимое значение: "image_generation")
**Ответ (200 OK):**
```json
{
"message": "Ваше изображение генерируется, пожалуйста подождите, готовое изображение будет у вас в галереи",
"Task_ID": "123",
"queue_position": 5
}
```
**Ошибки:**
- 400 Bad Request: Недопустимый тег
- 404 Not Found: Пользователь не найден
- 500 Internal Server Error: Ошибка при создании задачи или отправке сообщения
#### GET /user_pending_tasks/{user_id}
Получает список задач пользователя в статусе PENDING с их позициями в очереди.
**Параметры пути:**
- `user_id` (integer, обязательный): ID пользователя
**Ответ (200 OK):**
```json
[
{
"task_id": 123,
"prompt_id": "prompt_id_from_comfyui",
"status": "PENDING",
"created_at": "2025-03-13T11:15:00",
"queue_position": 3,
"updated_at": "2025-03-13T11:20:00"
},
{
"task_id": 124,
"prompt_id": "prompt_id_from_comfyui_2",
"status": "STARTED",
"created_at": "2025-03-13T11:10:00",
"queue_position": null,
"updated_at": "2025-03-13T11:20:00"
}
]
```
**Ошибки:**
- 404 Not Found: Пользователь не найден
- 500 Internal Server Error: Внутренняя ошибка сервера
#### GET /task_position/{task_id}
Получает текущую позицию задачи в очереди.
**Параметры пути:**
- `task_id` (integer, обязательный): ID задачи
**Ответ (200 OK):**
```json
{
"task_id": 123,
"status": "PENDING",
"queue_position": 3
}
```
**Ошибки:**
- 404 Not Found: Задача не найдена
- 500 Internal Server Error: Внутренняя ошибка сервера
#### GET /images_links/{user_id}
Получает список ссылок на изображения пользователя.
**Параметры пути:**
- `user_id` (integer, обязательный): ID пользователя
**Ответ (200 OK):**
```json
[
{
"id": 1,
"link": "file_id_from_telegram",
"prompt_id": "prompt_id_from_comfyui",
"status": "COMPLETED",
"created_at": "2025-03-12T12:00:00",
"sticker_set_id": null
}
]
```
**Ошибки:**
- 404 Not Found: Пользователь не найден
### Управление стикерами
#### POST /upload_sticker
Загружает файл стикера на сервер Telegram.
**Тело запроса:**
```json
{
"user_id": 123456789,
"link": "https://example.com/image.png"
}
```
**Параметры:**
- `user_id` (integer, обязательный): ID пользователя
- `link` (string, обязательный): URL или путь к файлу стикера
**Ответ (200 OK):**
```json
{
"file_id": "file_id_from_telegram"
}
```
**Ошибки:**
- 500 Internal Server Error: Ошибка при загрузке файла на сервер Telegram
#### POST /create_sticker_set
Создает новый набор стикеров.
**Тело запроса:**
```json
{
"user_id": 123456789,
"sticker_set_name": "example_set",
"title": "Example Sticker Set",
"file_id": "file_id_from_telegram",
"emojis": "😀",
"is_animated": false,
"is_video": false
}
```
**Параметры:**
- `user_id` (integer, обязательный): ID пользователя
- `sticker_set_name` (string, обязательный): Название набора стикеров (без суффикса _by_bot)
- `title` (string, обязательный): Заголовок набора стикеров
- `file_id` (string, обязательный): File_id загруженного стикера
- `emojis` (string, обязательный): Список эмодзи для стикера
- `is_animated` (boolean, опциональный, по умолчанию false): Флаг анимированного стикера
- `is_video` (boolean, опциональный, по умолчанию false): Флаг видео-стикера
**Ответ (200 OK):**
```json
{
"message": "Новый набор стикеров успешно создан!",
"name": "example_set_by_bot_name"
}
```
**Ошибки:**
- 500 Internal Server Error: Ошибка при создании набора стикеров
#### POST /add_sticker_to_set
Добавляет стикер в существующий набор.
**Тело запроса:**
```json
{
"user_id": 123456789,
"sticker_set_name": "example_set",
"file_id": "file_id_from_telegram",
"emojis": "😀",
"is_animated": false,
"is_video": false
}
```
**Параметры:**
- `user_id` (integer, обязательный): ID пользователя
- `sticker_set_name` (string, обязательный): Название набора стикеров (без суффикса _by_bot)
- `file_id` (string, обязательный): File_id загруженного стикера
- `emojis` (string, обязательный): Список эмодзи для стикера
- `is_animated` (boolean, опциональный, по умолчанию false): Флаг анимированного стикера
- `is_video` (boolean, опциональный, по умолчанию false): Флаг видео-стикера
**Ответ (200 OK):**
```json
{
"message": "Стикер успешно добавлен в набор!"
}
```
**Ошибки:**
- 500 Internal Server Error: Ошибка при добавлении стикера в набор
#### GET /check_sticker_set_name/{sticker_set_name}
Проверяет, существует ли набор стикеров с указанным именем.
**Параметры пути:**
- `sticker_set_name` (string, обязательный): Название набора стикеров
**Ответ (200 OK):**
```json
{
"exists": true
}
```
**Ошибки:**
- 500 Internal Server Error: Ошибка при проверке существования набора стикеров
#### POST /delete_sticker_from_set
Удаляет стикер из набора.
**Тело запроса:**
```json
{
"file_id": "file_id_from_telegram"
}
```
**Параметры:**
- `file_id` (string, обязательный): File_id стикера
**Ответ (200 OK):**
```json
{
"message": "Стикер успешно удален из набора!"
}
```
**Ошибки:**
- 500 Internal Server Error: Ошибка при удалении стикера из набора
#### POST /set_sticker_position_in_set
Изменяет позицию стикера в наборе.
**Тело запроса:**
```json
{
"sticker_file_id": "file_id_from_telegram",
"position": 0
}
```
**Параметры:**
- `sticker_file_id` (string, обязательный): File_id стикера
- `position` (integer, обязательный): Новая позиция стикера (0 - первая позиция)
**Ответ (200 OK):**
```json
{
"message": "Позиция стикера успешно изменена!"
}
```
**Ошибки:**
- 500 Internal Server Error: Ошибка при изменении позиции стикера
#### POST /delete_sticker_set
Удаляет набор стикеров.
**Тело запроса:**
```json
{
"sticker_set_name": "example_set_by_bot_name"
}
```
**Параметры:**
- `sticker_set_name` (string, обязательный): Полное название набора стикеров (включая суффикс _by_bot)
**Ответ (200 OK):**
```json
{
"message": "Набор стикеров успешно удален!"
}
```
**Ошибки:**
- 500 Internal Server Error: Ошибка при удалении набора стикеров
#### POST /create_sticker_set_db
Создает запись о стикерпаке в базе данных.
**Тело запроса:**
```json
{
"user_id": 123456789,
"sticker_set_name": "example_set_by_bot_name"
}
```
**Параметры:**
- `user_id` (integer, обязательный): ID пользователя
- `sticker_set_name` (string, обязательный): Полное название набора стикеров (включая суффикс _by_bot)
**Ответ (201 Created):**
```json
{
"id": 1,
"set_name": "example_set_by_bot_name",
"user_id": 123456789
}
```
**Ошибки:**
- 404 Not Found: Пользователь не найден
- 400 Bad Request: Ошибка валидации
- 500 Internal Server Error: Внутренняя ошибка сервера
#### GET /user_sticker_sets/{user_id}
Возвращает список названий всех стикерпаков пользователя.
**Параметры пути:**
- `user_id` (integer, обязательный): ID пользователя
**Ответ (200 OK):**
```json
[
{
"id": 1,
"set_name": "example_set_by_bot_name",
"user_id": 123456789
}
]
```
**Ошибки:**
- 404 Not Found: Пользователь не найден
- 500 Internal Server Error: Внутренняя ошибка сервера
### Прокси для Telegram API
#### GET /stickers/packs/{pack_name}
Получает информацию о стикерпаке из Telegram.
**Параметры пути:**
- `pack_name` (string, обязательный): Название стикерпака
**Ответ (200 OK):**
```json
{
"name": "example_set_by_bot_name",
"title": "Example Sticker Set",
"sticker_type": "regular",
"thumbnail_url": "http://localhost:8001/stickers/proxy/sticker/file_id_from_telegram",
"share_url": "https://t.me/addstickers/example_set_by_bot_name",
"stickers": [
{
"file_id": "file_id_from_telegram",
"emoji": "😀",
"position": 0,
"file_url": "http://localhost:8001/stickers/proxy/sticker/file_id_from_telegram"
}
]
}
```
#### GET /stickers/proxy/sticker/{file_id}
Прокси для получения изображения стикера без раскрытия токена бота.
**Параметры пути:**
- `file_id` (string, обязательный): File ID стикера
**Ответ (200 OK):**
Изображение стикера в формате WebP с заголовками:
- Content-Type: image/webp
- Content-Disposition: inline
- Cache-Control: public, max-age=86400
**Ошибки:**
- 404 Not Found: Стикер не найден
- 500 Internal Server Error: Ошибка при получении стикера
#### POST /stickers/test/upload
Тестовый эндпоинт для загрузки изображения в Telegram.
**Форма запроса:**
- `user_id` (integer, обязательный): Telegram ID пользователя
- `image_url` (string, обязательный): URL изображения для загрузки
**Ответ (200 OK):**
```json
{
"success": true,
"file_id": "file_id_from_telegram",
"file_url": "http://localhost:8001/stickers/proxy/sticker/file_id_from_telegram"
}
```
**Ошибки:**
- 500 Internal Server Error: Ошибка при загрузке изображения
## Модели данных
### UserBase
```json
{
"user_id": 123456789,
"username": "example_user",
"chat_id": 123456789,
"balance": 0
}
```
### UserCreate
```json
{
"user_id": 123456789,
"username": "example_user",
"chat_id": 123456789,
"balance": 0
}
```
### ImageBase
```json
{
"id": 1,
"link": "file_id_from_telegram",
"prompt_id": "prompt_id_from_comfyui",
"status": "COMPLETED",
"created_at": "2025-03-12T12:00:00",
"sticker_set_id": null
}
```
### StickerUploadRequest
```json
{
"user_id": 123456789,
"link": "https://example.com/image.png"
}
```
### StickerSetRequest
```json
{
"user_id": 123456789,
"sticker_set_name": "example_set",
"title": "Example Sticker Set",
"file_id": "file_id_from_telegram",
"emojis": "😀",
"is_animated": false,
"is_video": false
}
```
### StickerFileID
```json
{
"file_id": "file_id_from_telegram"
}
```
### StickerSetPosition
```json
{
"sticker_file_id": "file_id_from_telegram",
"position": 0
}
```
### StickerSetName
```json
{
"sticker_set_name": "example_set_by_bot_name"
}
```
### GenerateImageRequest
```json
{
"tag": "image_generation",
"user_id": 123456789,
"workflow": {
// Объект workflow для ComfyUI
}
}
```
### CreateStickerSetDBRequest
```json
{
"user_id": 123456789,
"sticker_set_name": "example_set_by_bot_name"
}
```
### StickerSetResponse
```json
{
"id": 1,
"set_name": "example_set_by_bot_name",
"user_id": 123456789
}
```
### TaskPosition
```json
{
"task_id": 123,
"status": "PENDING",
"queue_position": 3
}
```
### PendingTask
```json
{
"task_id": 123,
"prompt_id": "prompt_id_from_comfyui",
"status": "PENDING",
"created_at": "2025-03-13T11:15:00",
"queue_position": 3,
"updated_at": "2025-03-13T11:20:00"
}