Latihan 1: Idempotency — API

Latihan 1 dari materi Idempotency di API — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.

Lengkapi createPaymentHandler() di starter. Map store, object yang di-return, method process(idempotencyKey, amount), dan semua console.log di bawahnya sudah ada, biarkan tetap.

Di dalam process:

  1. Kalau store.has(idempotencyKey): kembalikan salinan response yang tersimpan dengan cached: true, yaitu { ...store.get(idempotencyKey), cached: true }. Jangan mengubah object yang tersimpan: response pertama harus tetap cached: false.
  2. Kalau belum ada: buat { status: "success", amount, id: "pay_" + store.size, cached: false } (hitung id sebelum store.set), simpan dengan store.set(idempotencyKey, response), lalu return.

Retry dengan key yang sama mengembalikan response tersimpan apa adanya. Latihan ini belum membandingkan body: server sungguhan menolak key yang sama dengan body berbeda dengan 422 (lihat teori), dan tester gak mengirim retry seperti itu.

Console-nya harus mencetak 8 baris ini, berurutan:

success
100000
pay_0
false
pay_0
true
pay_1
false

Tester juga membuat handler baru dan memanggil process('k1', 5), retry process('k1', 5), lalu process('k2', 7). Hasil yang diharapkan, untuk id dan cached panggilan pertama, id, amount, dan cached panggilan kedua, lalu id dan cached panggilan ketiga: ["pay_0", false, "pay_0", 5, true, "pay_1", false].

Hint