Submission V2 Structure Rules (Prompt-Ready)
1. Prinsip Utama
submission-v2adalah context orkestrasi transisi workflow berbasis action.- Orkestrator harus tipis: flow di
submission-v2.service.ts, query dipindah ke repository. - Pisahkan read-query dan write-command untuk menjaga readability dan testability.
- Semua perubahan harus behavior-preserving kecuali ada kebutuhan bisnis baru yang eksplisit.
2. Struktur Folder Standar
submission-v2/
docs/
STRUCTURE-RULES.md
submission-v2-system-behavior.md
submission-v2.service.ts
submission-v2.repository.ts
submission-v2-command.repository.ts
submission-v2-log.service.ts
submission-v2.types.ts
submission-v2.service.spec.ts
submission-v2.repository.spec.ts
3. Tanggung Jawab Tiap File
3.1 submission-v2.service.ts
- Entry point
setSubmission(...). - Menentukan urutan flow end-to-end.
- Validasi guard orchestration (
override, reason, workflow/action ownership, status transition). - Tidak boleh berisi query DB langsung.
3.2 submission-v2.repository.ts
- Read-query data live (
wxl_submission,wml_workflow,wml_action). - Lock submission row (
pessimistic_write) untuk flow update. - Tidak mengandung write/update command.
3.3 submission-v2-command.repository.ts
- Operasi write/command submission/entity (
insert,update,sync). - Validasi keamanan identifier tabel (
isSafeIdentifier) dan validasi payload kolom. - Menjadi tempat query
information_schema.columnsuntuk context ini.
3.4 submission-v2-log.service.ts
- Hitung approval snapshot dari config action.
- Build payload log
wxl_submission_log. - Tidak melakukan query DB langsung.
3.5 submission-v2.types.ts
- Kontrak payload/return/service internal (
SetSubmissionPayload,SetSubmissionResult,ApprovalSnapshot, dst). - Menjadi referensi typing lintas service dalam context.
3.6 submission-v2.service.spec.ts
- Unit test utama orkestrasi
SubmissionServiceV2. - Menjaga regression flow create/update submission dan guard validation.
3.7 submission-v2.repository.spec.ts
- Unit test read repository.
- Menjaga behavior lock/read dan validasi input read path.
4. Aturan Boundary (Hitam Putih)
- Logic approval snapshot hanya di
submission-v2-log.service.ts. - Read-query workflow/action/submission hanya di
submission-v2.repository.ts. - Write-command submission/entity/log hanya di
submission-v2-command.repository.ts. submission-v2.service.tstidak boleh menambahkan knowledge schema tabel entity native.- Integrasi transport (HTTP/worker) tetap di context pemanggil.
5. Aturan Refactor
- Ubah struktur/naming dulu, hindari ubah behavior dalam satu langkah besar.
- Jika menambah field payload/return, update sekaligus:
submission-v2.types.ts- caller API/worker terkait
- unit/integration test terkait
submission-v2-system-behavior.md
- Jangan menghapus guard (
override, reason, status transition) tanpa keputusan bisnis tertulis. - Hindari menambah query DB langsung ke
submission-v2.service.ts.
6. Aturan Testing Minimum
- Jalankan unit test context:
packages/lib/src/service/workflow-action/submission-v2/submission-v2.service.spec.tspackages/lib/src/service/workflow-action/submission-v2/submission-v2.repository.spec.ts
- Jalankan integration test endpoint v2:
apps/api/src/api/core/workflow/workflow.submission-v2.integration.spec.ts
- Verifikasi minimal skenario ini tetap lolos:
- create submission baru
- update submission existing
- guard error (submission/workflow/action invalid)
- native payload filtering/validasi
- approval quorum behavior
7. Prompt Refactor (Siap Pakai)
Refactor `packages/lib/src/service/workflow-action/submission-v2` dengan aturan:
- pertahankan boundary orchestration/read-repository/command-repository/log
- jangan ubah behavior runtime `setSubmission(...)` kecuali diminta
- jaga error contract yang sudah dipakai caller
- update docs `submission-v2-system-behavior.md` jika ada perubahan behavior
Setelah refactor:
1. jalankan unit test submission-v2
2. jalankan integration test endpoint `/api/workflow/submission/v2`
3. laporkan file yang dipindah/diubah dan risiko behavior