Импортирует заказы для списка клиентов

Исправьте изменяемый аргумент по умолчанию, проверьте блокирующий API-вызов и разделите ошибки клиента и отдельного заказа. Повторный импорт должен быть идемпотентным.

Короткий ответ

Что ответить на собеседовании

Исправьте изменяемый аргумент по умолчанию, проверьте блокирующий API-вызов и разделите ошибки клиента и отдельного заказа. Повторный импорт должен быть идемпотентным.

Подробный разбор

Ответ с пояснениями

Условие

Импортирует заказы для списка клиентов

async def import_orders( self, customer_ids: list[int], imported_orders: list[dict[str, Any]] = [], ) -> dict[str, Any]: """ Импортирует заказы для списка клиентов """ results = { "created": 0, "failed": 0, "orders": imported_orders, }

for customer_id in customer_ids:
    try:
        # Внешний API возвращает список сырых заказов клиента.
        orders = self.api_client.get_orders(customer_id)

        for order in orders:
            normalized_order = await self.normalize_order(order)

            # Отменённые заказы не должны попадать в БД
            if normalized_order["status"] == "cancelled":
                continue

            await self.save_order(normalized_order)

            results["created"] += 1
            results["orders"].append(normalized_order)

    except Exception as error:
        logger.error(
            f"Cannot import orders for customer {customer_id}: {error}"
        )
        results["failed"] += 1
return results

async def normalize_order(self, order: dict[str, Any]) -> dict[str, Any]: """ Преобразует заказ из формата внешнего API во внутренний формат.

Внешняя система может возвращать дополнительные поля, поэтому
импортёр сохраняет только данные, необходимые для локального сервиса.

Args:
    order: Исходный заказ, полученный из API.

Returns:
    Нормализованный словарь с данными заказа.
"""

Ответ

Исправьте изменяемый аргумент по умолчанию, проверьте блокирующий API-вызов и разделите ошибки клиента и отдельного заказа. Повторный импорт должен быть идемпотентным.

Передавайте imported_orders=None и создавайте новый список внутри вызова; при необходимости копируйте переданный список. Синхронный get_orders блокирует async-функцию: используйте асинхронный клиент либо согласованный запуск в потоке. В показанном normalize_order есть только docstring, поэтому он вернёт None. Задайте валидацию, фильтрацию полей и явный return. Сейчас failed считает клиентов, а created — заказы; уточните семантику. Уникальный внешний ID и атомарное сохранение предотвращают дубли при retry; сырые заказы и секреты в лог не пишите.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее