Architecture
High-Level Architecture
Layering
| Layer | Lokasi | Tanggung Jawab |
|---|---|---|
| Routing | routes/*.php, routes/API/V1/api.php | endpoint map + middleware |
| Controller | app/Http/Controllers/* | orchestration request/response |
| Request Validation | app/Http/Requests/* | validasi payload |
| Domain Model | app/Models/*, app/Modules/*/Models/* | aturan domain + relasi |
| Action (SPK/PO module) | app/Modules/*/Actions/* | business operation tersegmentasi |
| Resource API | app/Http/Resources/* | transform response API |
| Persistence | database/migrations/* | schema + evolusi data |
| Async | app/Jobs/* | export/pdf/push async |
Route Grouping
| Group | Prefix | Middleware |
|---|---|---|
| Admin | /admin/* | web, auth, access:* |
| API V1 | /api/v1/* | api, sebagian auth:sanctum + access:* |
| Membership | custom route file | register/login/otp/fcm |
Auth & Access Control
- Session auth untuk web admin.
- Sanctum token untuk API.
- Gate policy di
AuthServiceProvider. - Middleware
EnsureUserHasRolememvalidasi role + edge case project yang di-soft-delete.
Modul Kunci
- SPB Module: pengajuan bahan/barang proyek.
- PO Module: purchase order per supplier, lifecycle approval sampai penerimaan.
- Payment Module: payment terms, tax, verifikasi, split payment.
- SPK Module: kontrak kerja + revisi + payment + accounting + receipt.
Pattern yang Dipakai
- Fat-model scopes untuk filtering status (
scopeCondition,notComplete, dst). - Enum native PHP (SPK/PO receipt/payment split status).
- Action classes untuk operasi kompleks modul SPK/PO receipt.
- Soft delete di beberapa entity (users, suppliers, spbs, pre_orders, spks).
Technical Debt yang Terdeteksi
| Area | Observasi | Dampak |
|---|---|---|
| Query SPB notComplete/complete | raw SQL kompleks + TODO refactor | maintainability rendah |
| Campuran style model/module | sebagian domain masih controller-heavy | konsistensi rendah |
| Route admin sangat besar | >100 route dalam satu file | onboarding sulit |
Catatan Verifikasi
- Status: Partial
- Scope: Performa query raw SPB pada volume data besar belum dibenchmark.
- Action: Jalankan profiling query + baseline response time di staging/production-like dataset.