Python · 41 строк
Покупатель выбирает в заказе товары и оформляет возврат. Окно — 14 дней с получения, бельё, косметика и цифровые товары не возвращаются. Если вернули весь заказ, возвращаем и платную доставку.
Функцию вызывает API мобильного приложения: order_id и item_ids приходят из JSON как есть. В проекте USE_TZ = True, поля цен — DecimalField. Отметьте строки с ошибками.
В работе: Раздел «Мои заказы» → «Вернуть товар»: в распродажу 11.11 сюда приходят тысячи заявок в час.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
Источник: наша задача на данных Ozon: возвраты и заказы. Условие пересказано своими словами.
Давали на собеседовании?
from datetime import datetime, timedeltafrom django.db import connectionfrom .models import Order, OrderItem, ReturnRequestfrom .notify import send_smsRETURN_DAYS = 14NON_RETURNABLE = {"underwear", "cosmetics", "digital"}def create_return(user, order_id, item_ids, reason):order = Order.objects.get(id=order_id)if order.delivered_at is None:return {"error": "Заказ ещё не получен"}deadline = order.delivered_at + timedelta(days=RETURN_DAYS)if datetime.now() > deadline:return {"error": "Срок возврата истёк"}refund = 0.0items = []for item_id in item_ids:item = OrderItem.objects.get(id=item_id)if item.product.category in NON_RETURNABLE:continuerefund += item.price * item.quantityitems.append(item)if order.delivery_paid and len(items) == order.items.count():refund += order.delivery_pricewith connection.cursor() as cur:cur.execute("UPDATE order_items SET status = 'return_requested' "f"WHERE order_id = {order_id} AND id IN ({','.join(map(str, item_ids))})")req = ReturnRequest.objects.create(order=order, user=user, reason=reason, refund=round(refund, 2))send_sms(order.phone, f"Заявка на возврат {req.id}: вернём {refund} ₽")return {"id": req.id, "refund": refund}