Задача

Необходимо оптимизировать логику создания заказа в FastAPI-сервисе на эндпоинте POST /orders/.

Проблема

Сейчас эндпоинт создает только заголовок заказа, а товары нужно добавлять отдельными запросами. Это нарушает атомарность. Если добавление товаров сломается, в системе останется висящий пустой заказ. Для бизнеса это критично: может быть списан резерв или ошибочно уменьшен остаток на складе.

Требования

  1. Изменить входные данные, чтобы принимать весь список товаров сразу в теле запроса (вместе с данными самого заказа).
  2. Реализовать полное атомарное создание: заказ и все связанные с ним позиции должны создаваться в рамках одной транзакции БД. При ошибке на любом этапе - полный откат транзакции.
  3. Добавить несколько уровней валидации:
    • Проверка, что все заказанные товары существуют и не деактивированы.
    • Проверка достаточности остатков на складе для всех позиций.
    • Проверка уникальности товаров в рамках одного заказа (нельзя добавить один и тот же товар дважды в один заказ одним запросом).
  4. На выходе эндпоинт должен вернуть полный и информативный ответ, включающий в себя: основные данные самого заказа, распакованный список всех заказанных товаров (с их актуальными названиями и ценами) и итоговую общую сумму заказа.
  5. После рефакторинга необходимо написать unit-тесты или интеграционные тесты на новую логику, а также обновить документацию к сервису (например, схемы Pydantic или OpenAPI-документацию).

Разработка системы парсинга трендов с управлением через Telegram-бота

Требуется разработать комплексное решение для поиска и сбора данных о трендовых постах из социальных сетей, управляемое через Telegram-бота с автоматической выгрузкой результатов в Google Таблицу.