Войти Регистрация
Код-ревью

3. Выписка по счёту постранично

Лёгкая

Python · 30 строк

Функция отдаёт выписку за период страницами по 50 операций. Приложение запрашивает page=1, page=2 и так далее, date_to приходит датой: «по 31 октября включительно».

Отметьте строки с ошибками.

В работе: Экран «Выписка» в приложении и выгрузка в PDF для визы или ипотеки.

Как проверяем Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
пагинацияSQLперсональные данные

Источник: на задачах Т‑Банка: выписка в мобильном банке. Условие пересказано своими словами.

Давали на собеседовании? Ответов пока мало — ваш поможет.
  1. import logging
  2. from datetime import datetime
  3. logger = logging.getLogger(__name__)
  4. PAGE_SIZE = 50
  5. def get_statement(conn, client, page, date_from, date_to):
  6. logger.info("Выписка для %s, телефон %s", client.full_name, client.phone)
  7. offset = page * PAGE_SIZE
  8. cur = conn.cursor()
  9. cur.execute(
  10. "SELECT id, created_at, amount, description FROM operations "
  11. "WHERE account_id = %s AND created_at BETWEEN %s AND %s "
  12. "LIMIT %s OFFSET %s",
  13. (client.account_id, date_from, date_to, PAGE_SIZE, offset),
  14. )
  15. rows = cur.fetchall()
  16. items = []
  17. total = 0
  18. for op_id, created_at, amount, description in rows:
  19. total += amount
  20. items.append({
  21. "id": op_id,
  22. "date": created_at.strftime("%d.%m.%Y %H:%M"),
  23. "amount": amount,
  24. "description": description,
  25. })
  26. return {"items": items, "page_total": total, "generated_at": datetime.now().isoformat()}