Skip to content

feat: Log Entri Audit DataSpasial (KAB-08) - #1315

Open
pandigresik wants to merge 41 commits into
rilis-devfrom
2509-log-entri-audit
Open

pandigresik wants to merge 41 commits into
rilis-devfrom
2509-log-entri-audit

Conversation

@pandigresik

@pandigresik pandigresik commented Oct 22, 2026 •

Copy link
Copy Markdown
Contributor

Pull Request: feat: Log Entri Audit DataSpasial (KAB-08)

Description

Menambahkan halaman Log Entri pada modul DataSpasial untuk menelusuri seluruh entri dan perubahan beserta pelaku serta asalnya (OpenKab atau OpenSID desa). Halaman ini membaca data lewat API Satu Data (GET /dataspasial/audit, GET /dataspasial/audit/ringkasan) dengan pemanggilan terpusat di DataSpasialApiService, menampilkan badge sumber berwarna beda, filter lengkap tersimpan di URL, detail perbandingan sebelum/sesudah per isian, kartu ringkasan per sumber, ekspor Excel hasil filter, serta tautan ke log entri dari halaman Monitoring KAB-07.

Changes made:

  1. Menu & Akses: Menambahkan submenu Log Entri di grup DataSpasial (App\Enums\Modul), permission dataspasial-audit-read via migrasi baru (database/migrations/2026_10_22_070004_add_dataspasial_audit_permission_and_menu.php) serta pemberian akses ke role DataSpasial (admin skema, operator impor, analis opd). Menu hanya muncul bagi yang berhak.
  2. API Client: Menambah method audit(), auditDetail(), auditRingkasan() di App\Services\DataSpasialApiService dengan header audit X-OpenKab-User-Id/X-OpenKab-User-Name dan skip cache agar log audit selalu segar.
  3. Service & Logika: Menambah App\Services\AuditDataSpasialService untuk normalisasi filter, pemetaan baris tabel, ringkasan per sumber, perbandingan sebelum/sesudah per isian, detail entri, serta ekspor seluruh hasil filter.
  4. Controller & Request: Menambah App\Http\Controllers\DataSpasial\AuditDataSpasialController (index/data/detail/ekspor) dan App\Http\Requests\DataSpasial\AuditDataRequest dengan validasi filter + bentuk galat meta.validation.
  5. Routing: Menambahkan route dataspasial/audit, dataspasial/audit/data, dataspasial/audit/detail/{id}, dataspasial/audit/ekspor dengan middleware permission:dataspasial-audit-read.
  6. UI & Komponen: Menambahkan view resources/views/dataspasial/audit/index.blade.php, komponen pakai-ulang resources/views/components/dataspasial-dropdown-desa.blade.php, JS public/js/dataspasial/audit.js, serta enum App\Enums\SumberEntri untuk label/badge sumber.
  7. Ekspor Excel: Menambah App\Exports\AuditDataSpasialExport (OpenSpout) dengan kolom sesuai tampilan layar.
  8. Integrasi Monitoring: Menambah kolom/tautan Log per desa di tabel Monitoring (public/js/dataspasial/monitoring.js, resources/views/dataspasial/monitoring/index.blade.php) yang mengarahkan ke halaman Log Entri dengan filter kode_desa terkait.
  9. UX: Penggantian alert() bawaan dengan SweetAlert (window.Swal) di JS audit & monitoring.
  10. Test: Menambah tests/Feature/DataSpasial/AuditDataTest.php untuk akses, badge sumber, filter (termasuk URL), ringkasan, detail sebelum/sesudah, ekspor, serta penanganan unavailable.

Reason for change:

  • Memenuhi kebutuhan kabupaten menelusuri asal data (dari OpenKab atau OpenSID desa) serta pelaku perubahan/entri.
  • Mengonsumsi endpoint API-08 (/dataspasial/audit, /dataspasial/audit/ringkasan) melalui DataSpasialApiService dengan header audit sesuai kebutuhan auditabilitas.
  • Menyediakan jejak audit yang dapat difilter, dilacak per baris (detail before/after), diringkas per sumber, dan diekspor untuk bahan laporan/pendampingan.

Impact of change:

  • ✅ Halaman Log Entri baru tersedia hanya bagi peran dengan hak audit
  • ✅ Dapat memisahkan entri OpenKab dan OpenSID lewat badge & filter sumber
  • ✅ Dapat menelusuri detail perubahan per isian (sebelum/sesudah)
  • ✅ Tersedia ringkasan entri per sumber dan ekspor Excel hasil filter
  • ✅ Tersedia tautan ke log desa dari halaman Monitoring (KAB-07)
  • ✅ Identitas pengguna OpenKab tercatat via header klien (sesuai catatan teknis)

Related Issue

Testing

Manual Testing

  • Halaman /dataspasial/audit hanya bisa diakses user berhak audit, ditolak bila tanpa izin
  • Tabel menampilkan waktu, pelaku, sumber, aksi, sasaran (sektor + periode), dan perubahan
  • Badge sumber berbeda warna (OpenKab = primary, OpenSID = info)
  • Filter sumber (Semua/OpenKab/OpenSID), kecamatan, desa (terfilter per kecamatan), sektor, aksi, pelaku, rentang tanggal berjalan dan tersimpan di URL
  • Detail baris menampilkan perbandingan sebelum/sesudah per isian
  • Kartu ringkasan menampilkan jumlah entri per sumber
  • Ekspor Excel menghasilkan berkas dari hasil filter (isi sesuai tampilan)
  • Tautan "Log" di tabel Monitoring mengarah ke Log Entri dengan filter desa terkait

Automated Testing

  • vendor/bin/pest tests/Feature/DataSpasial/AuditDataTest.php (15 passed, 57 assertions)

Browser Compatibility

  • Chrome/Edge (Chromium)

Technical Details

  • Arsitektur: Pola DataSpasial (Controller + Service + DataSpasialApiService), hasil dibungkus DataSpasialResult, cache dilewati untuk endpoint audit demi freshness.
  • API: Mengonsumsi GET /api/v1/dataspasial/audit, GET /api/v1/dataspasial/audit/ringkasan, GET /api/v1/dataspasial/audit/{id} (Fractal JSON:API).
  • Filter: Dinormalisasi di service, parameter API disesuaikan (sumber/aksi/pelaku/sektor/kode_kecamatan/kode_desa/waktu_dari/waktu_sampai + pagination).
  • Menu: Migrasi baru menambahkan submenu + permission tanpa mengubah migrasi lama.

Breaking Changes

None

Migration Guide

Jalankan migrasi untuk menambahkan permission/menu Log Entri:

php artisan migrate

Screenshots / Video

image

Additional notes

  • Nama pengguna OpenKab dikirim via header X-OpenKab-User-Id/X-OpenKab-User-Name oleh DataSpasialApiService agar tercatat di audit API.
  • Entri audit bersifat baca-saja (tidak ada aksi ubah/hapus).
  • Di luar lingkup: riwayat per fasilitas di OpenSID (SID-09).

…-dashboard)\n\n- spec.md with US1–US5, FR-001–FR-017, SC-001–SC-007 (no reload, tanpa data!=nol, clustering, popup flags)\n- plan.md + research.md + data-model.md + quickstart.md + contracts/view-contract.md\n- requirements checklist all pass
…asial sectors); no sektor picker; kecamatan-only filter
…/click popup, kecamatan-only filter, no sektor picker
@github-actions

Copy link
Copy Markdown
Contributor

🔄 AI PR Review sedang antri di server...

Proses review akan segera dimulai di background — hasil akan muncul sebagai komentar setelah selesai.
Powered by CrewAI · PR #1315

@pandigresik pandigresik changed the title 2509 log entri audit feat: Log Entri Audit DataSpasial (KAB-08) Oct 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant