# Panduan Menambah Module Baru ## 📦 Struktur Module Setiap module baru mengikuti pola yang sama: ``` src/Modules/ModuleBaru/ ├── ModuleBaruRoutes.php # Register routes ├── Controller.php # Request handler └── Service.php # Business logic ``` ## 🚀 Langkah Menambah Module ### 1. Buat Struktur Folder ```bash mkdir -p src/Modules/ModuleBaru ``` ### 2. Buat Routes File `src/Modules/ModuleBaru/ModuleBaruRoutes.php`: ```php group('/modulebaru', function ($group) { $group->group('/v1', function ($v1Group) { // Routes di sini $v1Group->get('/endpoint', [Controller::class, 'method']); }); }); } } ``` ### 3. Register di public/index.php Tambahkan di bagian "Register module routes": ```php use App\Modules\ModuleBaru\ModuleBaruRoutes; // ... // Register module routes HealthRoutes::register($app); AuthRoutes::register($app); RetribusiRoutes::register($app); ModuleBaruRoutes::register($app); // <-- Tambahkan di sini ``` ### 4. Update OpenAPI Spec (Opsional) Edit `public/docs/openapi.json` dan tambahkan endpoint baru di `paths`. ## ✅ Contoh: Module "Parkir" ```php // src/Modules/Parkir/ParkirRoutes.php namespace App\Modules\Parkir; use App\Middleware\JwtMiddleware; use Slim\App; class ParkirRoutes { public static function register(App $app): void { $jwtMiddleware = new JwtMiddleware(); $app->group('/parkir', function ($group) use ($jwtMiddleware) { $group->group('/v1', function ($v1Group) use ($jwtMiddleware) { $v1Group->get('/zones', [ParkirController::class, 'getZones']) ->add($jwtMiddleware); }); }); } } ``` ## 🔄 Best Practices 1. **Isolasi**: Setiap module independen 2. **Naming**: Gunakan namespace yang jelas 3. **Routes**: Group by module name 4. **Versioning**: Gunakan `/v1` untuk future compatibility 5. **Middleware**: Apply di level group atau route ## 📝 Checklist Module Baru - [ ] Buat folder `src/Modules/ModuleName/` - [ ] Buat `ModuleNameRoutes.php` dengan method `register()` - [ ] Buat Controller & Service (jika perlu) - [ ] Register di `public/index.php` - [ ] Test routes - [ ] Update OpenAPI spec (opsional) - [ ] Commit & push