Код Senior Кеш и очереди спрашивают часто обновлено

Идемпотентный обработчик по Idempotency-Key

Условие

Платёжный API принимает заголовок Idempotency-Key. Напиши createIdempotent(handler): возвращает async (key, body) => response.

  • Первый запрос с ключом вызывает handler(body) и запоминает ответ.
  • Повтор с тем же ключом и тем же телом возвращает сохранённый ответ, handler не вызывается.
  • Повтор с тем же ключом, но другим телом бросает ошибку с status = 422.
  • Если первый запрос с этим ключом ещё выполняется, параллельный повтор бросает ошибку с status = 409.
  • Если handler упал, ключ не запоминается: клиент может повторить.

Тела сравнивай через JSON.stringify (в задаче тела это простые объекты с одинаковым порядком ключей).

Что проверяют тесты

  • повтор отдаёт сохранённый ответ

  • другие ключи обрабатываются отдельно

  • тот же ключ с другим телом: 422

  • параллельный повтор: 409

  • после ошибки можно повторить

Как подойти

Подсказки: 2
  1. Храни по ключу отпечаток тела, состояние (pending/done) и ответ.
  2. Запись pending ставится до await handler, иначе параллельный повтор её не увидит.

Решите в тренажёре

Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.