Latihan 1: Idempotency & Retry Safety — System Design
Latihan 1 dari materi Idempotency & Retry Safety di System Design — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Bikin versi kecil dedupe store bayar: function createHandler(processFn) yang mengembalikan function handle(request). request berbentuk { idempotencyKey, payload }.
Di dalam createHandler, const cache = new Map(); sudah ada. Biarkan.
Di handle, cek dulu cache.has(request.idempotencyKey). Kalau key itu sudah pernah datang, kembalikan cache.get(request.idempotencyKey): objek hasil yang sama persis, tanpa memanggil processFn lagi.
Kalau key-nya baru, panggil processFn(request.payload), simpan hasilnya dengan cache.set(request.idempotencyKey, hasil), lalu kembalikan hasil itu.
Di latihan ini key saja yang menentukan: request kedua dengan key yang sama tetap dapat hasil simpanan walau payload-nya beda. Jangan bandingkan payload.
Kode di bawah createHandler (counter, process, tiga panggilan handle, dan lima console.log) sudah ada, biarkan begitu. Output-nya harus persis lima baris ini, berurutan:
1
1
true
2
2
Hint
Idempotensi dijaga dengan mengingat jawaban untuk tiap key, lalu mengembalikan jawaban yang sama saat key itu datang lagi, tanpa mengerjakan ulang.
Urutannya penting: cek cache dulu, baru panggil processFn. Kalau key ada, return cache.get(key). Kalau belum, panggil processFn(request.payload), simpan dengan cache.set, lalu return.