Код Middle Celery и очереди спрашивают часто обновлено
Идемпотентный обработчик сообщений
Условие
Обработчик получает сообщения о платежах {"id": ключ_идемпотентности, "user": ..., "amount": ...}; брокер доставляет их «как минимум один раз», возможны дубли. Напишите process(messages): примените каждое сообщение один раз (повтор с тем же id игнорируется, даже если сумма другая), отрицательные и нулевые суммы отклоняются (и тоже запоминаются как обработанные). Верните [балансы пользователей, число применённых, число дублей, число отклонённых].
Примеры
process([{"id":"a","user":"u1","amount":100}, {"id":"a","user":"u1","amount":100}]) // [{"u1":100}, 1, 1, 0]
process([]) // [{}, 0, 0, 0]
process([{"id":"x","user":"u","amount":-5}, {"id":"x","user":"u","amount":5}]) // [{}, 0, 1, 1]
Как подойти
Подсказки: 2
- Множество обработанных id.
- Отклонённые тоже помечайте обработанными.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.