Cross-Workflow Structure Rules (Prompt-Ready)
Dokumen ini adalah standar struktur folder dan tanggung jawab file untuk apps/worker-workflow/src/cross-workflow.
1. Prinsip Utama
- Gunakan pola
consumer -> service -> repository. - Pisahkan behavior relation
ONE_TO_MANYdanMANY_TO_ONEke service berbeda. - Hindari shared service besar yang berisi banyak
ifrelation. - Semua query DB berada di repository.
- Utility harus pure function tanpa DI.
2. Struktur Folder Standar
apps/worker-workflow/src/cross-workflow/
├── cross-workflow.module.ts
├── constants/
├── types/
├── docs/
├── repositories/
├── services/
└── utils/
Struktur file runtime minimum:
services/
cross-workflow.consumer.ts
cross-workflow.service.ts
cross-workflow-one-to-many.service.ts
cross-workflow-many-to-one.service.ts
repositories/
cross-workflow.repository.ts
types/
cross-workflow.interface.ts
utils/
cross-workflow-log.util.ts
relation-type.util.ts
identifier.util.ts
3. Tanggung Jawab Tiap Layer
3.1 consumer
Boleh:
- decode/filter CDC payload
- mapping CDC ->
CrossWorkflowTriggerPayload - manual
ack/nak - panggil
CrossWorkflowService.execute(...)
Tidak boleh:
- query DB kompleks
- transaction boundary bisnis
- relation readiness logic
3.2 cross-workflow.service.ts (orchestrator)
Boleh:
- buka/commit/rollback transaction
- resolve
SubmissionServiceV2via request context - load source submission + cross-workflow connections via repository
- routing relation type ke service relation
Tidak boleh:
- query mapping/detail SQL relation
- logic field mapping detail
3.3 cross-workflow-one-to-many.service.ts
Boleh:
- seluruh behavior relation
ONE_TO_MANY - mapping source->target entity
- create missing target submission
- execute target submission existing
3.4 cross-workflow-many-to-one.service.ts
Boleh:
- seluruh behavior relation
MANY_TO_ONE - mapping source->target entity (target field dipatok
id) - readiness gate sibling milestone
- create missing target submission dengan barrier config action target:
- baca
wml_action.is_cr_trgt_empty_conn - jika
false, skip auto-create saat koneksi kosong dan tulis reason log
- baca
- execute target submission existing setelah ready
3.5 cross-workflow.repository.ts
Boleh:
- semua read/write query yang dibutuhkan cross-workflow
- lock read/write query untuk submission
- lookup
information_schema.columns - caching check kolom fisik
Tidak boleh:
- keputusan orchestration relation
3.6 types/
- boundary payload/type lintas file
- tidak boleh ada query/DI
3.7 utils/
- pure helper (
normalizeRelationType, formatter log, validasi identifier) - tidak boleh akses DB
4. Aturan Naming
*.consumer.tsuntuk adapter transport.*.service.tsuntuk orchestration/use-case.*-one-to-many.service.tskhusus relationONE_TO_MANY.*-many-to-one.service.tskhusus relationMANY_TO_ONE.*.repository.tsuntuk query DB.*.interface.tsatau*.types.tsuntuk boundary payload/type.*.util.tsuntuk pure helper.
5. Aturan Boundary (Hitam Putih)
- Query DB hanya di
cross-workflow.repository.ts. cross-workflow.service.tshanya routing/orchestration, tidak boleh query mapping detail.- Behavior
ONE_TO_MANYdanMANY_TO_ONEtidak boleh digabung ke satu relation service. - Shared helper boleh di
utils/, bukan shared business service. - Consumer tidak boleh tahu detail relation/mapping.
- Auto-create target saat koneksi kosong wajib hormati
wml_action.is_cr_trgt_empty_conndan wajib tulis reason saat skip.
6. Aturan Refactor
- Pertahankan behavior runtime kecuali ada requirement eksplisit.
- Jika ubah kontrak payload, update bersamaan:
types/cross-workflow.interface.ts- consumer/service yang memakai kontrak
- test terkait
- dokumentasi behavior
- Jika menambah query, letakkan di repository.
- Jika menambah branch relation baru, buat service relation khusus.
7. Aturan Testing Minimum
- Unit test consumer:
apps/worker-workflow/src/cross-workflow/services/cross-workflow.consumer.spec.ts
- Unit test orchestrator:
apps/worker-workflow/src/cross-workflow/services/cross-workflow.service.spec.ts
- Unit test repository:
apps/worker-workflow/src/cross-workflow/repositories/cross-workflow.repository.spec.ts
- Typecheck worker-workflow:
pnpm exec tsc -p apps/worker-workflow/tsconfig.json --noEmit
8. Prompt Refactor (Siap Pakai)
Refactor `apps/worker-workflow/src/cross-workflow` dengan aturan:
- pola consumer -> service -> repository
- query DB hanya di repository
- pisahkan behavior relation ONE_TO_MANY dan MANY_TO_ONE ke service berbeda
- jangan buat shared relation service besar
- create target saat koneksi kosong harus cek `wml_action.is_cr_trgt_empty_conn` dan log reason ketika skip
- pertahankan behavior runtime kecuali diminta
Setelah refactor:
1. update import path
2. jalankan test consumer + service + repository
3. jalankan typecheck worker-workflow
4. laporkan file yang dipindah/diubah dan risiko perubahan