Latihan 1: Event Sourcing — Design Patterns

Latihan 1 dari materi Event Sourcing di Design Patterns — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.

Starter sudah berisi rebuild(events) (yang memanggil createAccount(events)), menjalankan setoran, penarikan, dan dua rebuild, lalu mencetak tujuh baris; bagian itu tetap. Lengkapi createAccount(events):

  1. Salin event awal ke log: const log = [...(events || [])], dan siapkan let balance = 0.
  2. Tulis apply(event): Deposited menambah balance sebesar event.amount, Withdrew menguranginya. Lalu jalankan log.forEach(apply), supaya saldo awal adalah hasil replay.
  3. Kembalikan object dengan:
    • balance(): kembalikan balance.
    • deposit(amount): kalau amount <= 0, throw new Error('Invalid amount') sebelum mencatat apa pun. Kalau sah, push { type: 'Deposited', amount: amount } ke log lalu apply.
    • withdraw(amount): kalau amount > balance, throw new Error('Insufficient funds'). Kalau sah, push { type: 'Withdrew', amount: amount } lalu apply.
    • getEvents(): kembalikan log.

Console harus mencetak tujuh baris ini, berurutan:

  1. 0
  2. 120
  3. 3
  4. Insufficient funds
  5. invalid deposit (dicetak catch di starter saat deposit(-1) melempar)
  6. 120
  7. 150

Yang juga dinilai: sesudah deposit(100), withdraw(500) ditolak dengan pesan Insufficient funds dan saldonya tetap, jadi Insufficient funds|100; deposit(-5) ditolak tanpa tercatat, jadi tolak|0, dan pesan error-nya persis Invalid amount; rebuild dari event pertama (setoran 10) memberi 10; dan deposit(70) lalu withdraw(20) memberi 50|2|50.

Hint