Repository navigation
Feature: Editor skema kabupaten (KAB-02) — daftar sektor, susun isian, simpan draf, dan terbitkan - #1308
Open
pandigresik wants to merge 5 commits into
Open
Feature: Editor skema kabupaten (KAB-02) — daftar sektor, susun isian, simpan draf, dan terbitkan#1308pandigresik wants to merge 5 commits into
pandigresik wants to merge 5 commits into
Conversation
Contributor
|
🔄 AI PR Review sedang antri di server...
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Pull Request: Feature: Editor skema kabupaten (KAB-02) — daftar sektor, susun isian, simpan draf, dan terbitkan
Description
Pada mode Terpusat, desa tidak dapat mengubah skema sendiri, sehingga halaman ini menjadi satu-satunya tempat skema kabupaten diatur. PR ini mengubah
/dataspasial/skemadari kerangka statis menjadi editor tiga panel yang berfungsi penuh: daftar sektor dan versi di kiri, tabel isian di tengah, pratinjau formulir desa di kanan — seluruhnya dibaca dan ditulis lewatDataSpasialApiServiceke API Satu Data.Selain editor, PR ini mengaktifkan tombol Terbitkan (tadi nonaktif statis) dan menambahkan ubah sektor, sehingga alur dari menyusun sampai menerbitkan dapat dilakukan dari satu halaman.
Changes made:
SkemaEditorServicebaru (431 baris) — read model pemetaan sektor, versi, isian, pemetaan sumber, dan status editor.TipeIsiandanStatusSkemaEditoruntuk tipe isian serta keadaan editor (kosong / draf / terbit / belum tersedia).SkemaDataSpasialController—index,storeSektor,updateSektor,storeDraf,terbit; sumber kebenarannya daftar sektor dan riwayat versi, bukan daftar skema.StoreSektorRequest,UpdateSektorRequest,StoreDrafSkemaRequest,TerbitSkemaRequest— seluruh aksi tulis memakai FormRequest (bukanvalidator()inline).GET dataspasial/skema(read) sertaPOST|PUTsektor,POSTdraf,POSTterbitan — semuanya dibatasipermission:dataspasial-skema-write.DataSpasialApiService— menambahriwayatSkema(),buatSektor(),ubahSektor(), dan memakai ulangbuatDrafSkema()/terbitkanSkema()untuk endpoint yang belum ada.index.blade.php(daftar sektor, daftar versi, tabel isian, form isian, pemilih sumber, pratinjau).public/js/dataspasial/schema-editor.js(946 baris) — tambah/hapus/urut isian, pemetaan sumber, saklar tampilan, pratinjau langsung, simpan draf, terbitkan, ubah sektor.Fixtures.phpberisi salinan respons API nyata, danSmokeSkemaEditorTest.phpuntuk browser.Reason for change:
GET /skema?sektor=: endpoint itu hanya mengembalikan satu versi aktif. Editor butuh seluruh versi (draf berjalan + riwayat), sehingga dipakaiGET /skema/riwayat?sektor={kode}— diverifikasi langsung ke API hidup.namasektor dannomor_versidivalidasi sisi server. OpenKab hanya menjaga bentuk input; field tersembunyinama_sektor_adadihapus agar tidak ada sumber kebenaran ganda.kodeisian diturunkan darilabel: admin tidak lagi mengetik kode. Label duplikat ditolak (bukan diberi akhiran angka) dan keunikannya berlaku per versi — draf berikutnya disalin dari versi sebelumnya, jadi larangan lintas versi akan membuat penerbitan versi mustahil.DataSpasialApiServicedari KAB-01, tetapi tidak ada route, controller, maupun handler JS — jadi diimplementasikan penuh di sini.Impact of change:
✅ Editor berfungsi: halaman
/dataspasial/skematidak lagi sekadar kerangka — daftar sektor, versi, isian, dan pratinjau semuanya hidup.✅ Alur penuh sampai terbit: draf → terbitan dengan konfirmasi yang menyebut sektor dan nomor versi.
✅ Otorisasi ditegakkan server-side lewat middleware permission, bukan sekadar menyembunyikan tombol.
✅ Kegagalan API tidak merusak state:
404/405/422diterjemahkan menjadi pesan "data sementara tidak tersedia"; isi editor dipertahankan.✅ Satu sumber kebenaran untuk
kode: nilai turunan darilabelyang selalu dihitung ulang saat serialisasi, bukan input yang bisa dipercayai tapi berbeda dari label.✅ Bug runtime tertangkap:
dataset?.aturan-hitungdiparse sebagai pengurangan sehinggaReferenceErrorterjadi setiap kali admin menekan "Simpan draf" — sudah diperbaiki dan diberi regression test.Related Issue
Commit
7cc36145("UI/UX sudah OK") membbundel refaktor pada 7 service yang tidak berkaitan dengan KAB-02:Perubahan ini tidak bagian dari #1297 dan sebaiknya dipisah menjadi PR tersendiri agar review fokus. Tidak ada test yang menutupnya di PR ini.
Selain itu,
.eslintignore,.npmignore, dan.prettierignoremasih untracked — belum ikut ter-commit.Steps to Reproduce
Before (sebelum PR):
/dataspasial/skemaAfter (sesudah PR):
/dataspasial/skemasebagai peran Admin Skemalabeldiisi,kodeterbangkit otomatis dan kolomnya tidak lagi adaPOST /dataspasial/skema; draf dapat dibuka dan diedit lagiTesting on related features:
DataSpasialController.phptidak disentuhDataSpasialMenuAccessTest)Checklist
Technical Details
Technical Explanation
Arsitektur: nol tabel lokal. Seluruh data
ds_*dibaca/tulis lewatDataSpasialApiService. Halaman hanya punya satu sumber kebenaran — daftar sektor (GET /dataspasial/sektor) dan riwayat versi (GET /dataspasial/skema/riwayat?sektor={kode}).Komponen tiga-keadaan dari KAB-01 dipakai apa adanya:
Alur
kode(FR-017/Q14/Q17):Jumlah Siswa→jumlah_siswa. Label duplikat ditolak;kodetidak diberi akhiran angka. Saat serialisasi,kodeselalu dihitung ulang darilabel— inputkodetidak pernah dipercaya.Otorisasi — server-side, bukan menyembunyikan tombol:
Configuration changes
Tidak ada perubahan config,
.env, atau migrasi. Peran & izin sudah tersedia dari KAB-01 — tidak ada migration peran baru.Dependencies added
No new dependencies. Everything uses the existing stack (Laravel 13, Blade, native HTML5 drag-and-drop,
ben-sampo/laravel-enum).Testing
Manual Testing
manualdi pratinjau → input bisa diisi; isian terpetakan → terkunci + keterangan sumberAutomated Testing
14 file, 258 test passed (diverifikasi per-file):
SkemaEditorSektorTestSkemaEditorValidationTestSkemaEditorIsianTestDataSpasialRoleMigrationTestDataSpasialUnavailableTestDataSpasialMenuAccessTestDataSpasialApiServiceTestSkemaEditorPratinjauTestSkemaEditorDrafTestSkemaEditorSaklarTestDataSpasialResultTestSkemaEditorPemetaanTestSkemaEditorEditSektorTestSkemaEditorTerbitTestPerintah:
vendor/bin/pest tests/Feature/DataSpasial/satu kali untuk mengonfirmasi jumlah gabungan — run gabungan pernah terputus dua kali dan belum pernah selesai penuh.Screenshots / Video
simplescreenrecorder-2026-10-16_10.00.54.mp4
Before:
Halaman
/dataspasial/skemahanya kerangka — tidak ada daftar sektor, tabel isian kosong, tombol Terbitkan nonaktif.After:
Tiga panel aktif — daftar sektor + versi di kiri, tabel isian (tanpa kolom Kode) di tengah, pratinjau formulir di kanan; tombol Simpan draf & Terbitkan aktif.
Breaking Changes
None — tidak ada perubahan pada kontrak API, config, atau skema basis data.
ds_skema_versitidak perlu fieldnamabaru.Migration Guide
Not required — tidak ada migrasi. Peran dan izin sudah ada dari KAB-01.
References
docs/spasial/openapi-fondasi.yamlspecs/004-pengelola-skema-editor/contracts/skema-editor-api.mdspecs/004-pengelola-skema-editor/contracts/openapi-fragment.yamlspecs/004-pengelola-skema-editor/spec.mdspecs/004-pengelola-skema-editor/tasks.mdAdditional notes untuk reviewer:
ReferenceError: hitung is not definedpada "Simpan draf" bertahan lama karena tidak ada test yang benar-benar mengklik tombol itu. Test yang ada bersifat statis/regression — belum menggantikan browser test.