# 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" }