112 lines
2.4 KiB
Markdown
112 lines
2.4 KiB
Markdown
|
|
# 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
|
||
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
namespace App\Modules\ModuleBaru;
|
||
|
|
|
||
|
|
use Slim\App;
|
||
|
|
|
||
|
|
class ModuleBaruRoutes
|
||
|
|
{
|
||
|
|
public static function register(App $app): void
|
||
|
|
{
|
||
|
|
$app->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
|
||
|
|
|