Latihan 1 dari materi Audit Logs & Auth Trail di Auth — praktek dengan editor kode interaktif, test case otomatis, dan hint terpandu. Langsung jalan di browser.
Lengkapi dua function di kode awal.
createAuditLog(userId, action, resource, success, metadata): kembalikan object dengan field userId, action, resource, success, metadata (semua apa adanya dari argumen) dan timestamp berisi new Date().toISOString().
queryAuditLogs(logs, filters): filters bisa berisi userId, action dan success (boolean). Kembalikan array log yang cocok dengan semua filter yang dikirim. Filter yang gak dikirim (undefined) gak mempersempit hasil. Periksa dengan !== undefined, karena success: false juga sebuah filter.
Semua console.log dan array logs (empat log) di kode awal sudah ada, biarkan. Output-nya harus persis tujuh baris ini, berurutan:
user1
login
true
string (jenis timestamp)
2 (log yang gagal)
3 (log milik user1)
1 (log user1 yang gagal)
Dicek juga: createAuditLog("u9", "logout", "sesi", false, {}) menyimpan resource dan success apa adanya, dan queryAuditLogs dengan { userId: "u9", success: false } atas log itu ditambah satu log u9 yang berhasil menghasilkan 1 log. Gabungannya "sesi|false|1".
Hint
Pencatatnya cuma merangkai argumen jadi satu object, ditambah penanda waktu ISO dari toISOString(). Penyaringnya menerima syarat yang boleh gak lengkap, dan yang lolos harus memenuhi semua syarat yang dikirim.
createAuditLog: return { userId, action, resource, success, metadata, timestamp: new Date().toISOString() }. queryAuditLogs: logs.filter, dan untuk tiap field cek dulu filters.field !== undefined sebelum membandingkannya dengan log.field.