Arsitektur Backend
Ringkasan
Backend dibangun dengan Laravel 13 di atas FrankenPHP dengan Octane. Aplikasi boot sekali dan handle banyak request dalam proses yang sama.
Octane Considerations
- Jangan simpan state per-request di singleton atau static property
- Gunakan scoped binding (
$this->app->scoped()) untuk service per-request - Deteksi driver:
config('octane.server')
Struktur Folder
app/
├── Console/Commands/ # Artisan commands
├── Enums/ # Enum per domain
├── Filament/ # Panel admin
├── Http/
│ ├── Controllers/Api/ # API controllers
│ ├── Controllers/Landing/ # Inertia page controllers
│ ├── Middleware/Setup/ # SetupMiddleware, MaintenanceMiddleware
│ ├── Requests/ # Form request validation
│ └── Resources/ # API Resources
├── Models/ # Eloquent models per domain
├── Observers/ # Model observers
├── Providers/ # Service + panel providers
├── Services/ # Logika bisnis
└── Traits/Common/ # Shared traitsService Layer
Services di app/Services/:
| Pattern | Contoh | Deskripsi |
|---|---|---|
{Domain}/{Action}.php | Otp/Generate.php | Single-action service dengan handle() |
{Domain}/{Name}Service.php | ImageKitService.php | Multi-method service class |
Aturan: Service berisi logika bisnis saja — tidak ada HTTP concerns.
Trait Layer
| Trait | Fungsi |
|---|---|
HasLocalization | Resolve kolom JSON terlokalisasi |
HasContact | Attachment kontak via tabel contacts |
HasLog | Audit logging otomatis |
HasAsset | Relasi dinamis ke tabel assets |
File Penting
| File | Tujuan |
|---|---|
bootstrap/app.php | Middleware stack |
app/Http/Middleware/Setup/SetupMiddleware.php | Gate redirect /setup |
app/Services/Common/IdentifierAppService.php | Pengecekan state terpusat |
app/Providers/Filament/PortalPanelProvider.php | Konfigurasi panel Portal |