perling/FASTEST_INTEGRATION.md

151 lines
3.8 KiB
Markdown

# Fastest Permohonan API Integration
## Overview
Integration telah selesai untuk endpoint fastest permohonan API Jakarta:
- **URL**: `https://wsdev.jakarta.go.id/gateway/DataPerizinanLingkungan/1.0/fastest_permohonan`
- **Parameters**: `kategori` (pertek/amdal), `limit` (default: 5)
- **Headers**: `Authorization: Bearer <token>`, `x-Gateway-APIKey: <key>`
## Database Schema
### Table: `fastest_permohonan`
```sql
- id (bigint, primary key)
- kategori (varchar) - pertek, amdal
- nama (varchar) - nama izin dari API
- total (integer) - jumlah total izin
- durasi_pemohon (varchar) - durasi rata-rata pemohon
- durasi_petugas (varchar) - durasi rata-rata petugas
- rank_order (integer) - urutan ranking 1-5
- api_last_updated (datetime) - dari field API last_updated
- sync_date (date) - tanggal sync data
- created_at, updated_at (timestamps)
```
**Indexes:**
- `(kategori, sync_date, rank_order)`
- Unique: `(kategori, rank_order, sync_date)`
## API Response Structure
```json
{
"success": 1,
"message": "Fastest permohonan retrieved successfully.",
"data": [
{
"nama": "SURAT PERNYATAAN PENGELOLAAN LINGKUNGAN (SPPL)",
"total": 7174,
"durasi_pemohon": "5 Hari 06 Jam 09 Menit 01 Detik",
"durasi_petugas": "4 Hari 03 Jam 12 Menit 18 Detik"
}
],
"last_updated": "2025-07-14 09:50:07"
}
```
## Files Modified/Created
### New Files:
1. `database/migrations/2025_07_14_024445_create_fastest_permohonan_table.php`
2. `app/Models/FastestPermohonan.php`
### Modified Files:
1. `app/Services/PerizinanApiService.php`
- Added `fetchFastestPermohonan()` method
- Added `syncFastestDataToDatabase()` method
- Modified `syncAllCategories()` to include fastest data
2. `app/Console/Commands/SyncPerizinanData.php`
- Added `--fastest` option
- Updated to sync both status and fastest data
3. `routes/console.php`
- Updated schedule to include `--fastest` flag
4. `app/Helpers/DashboardHelper.php`
- Added `getFastestPermohonanByType()` method
- Added `getAllFastestData()` method
- Added helper methods for formatting and display
## Commands
### Sync Status Data Only:
```bash
php artisan perizinan:sync # All categories
php artisan perizinan:sync pertek # Specific category
```
### Sync Status + Fastest Data:
```bash
php artisan perizinan:sync --fastest # All categories
php artisan perizinan:sync pertek --fastest # Specific category
```
### Check Data:
```bash
php artisan perizinan:check
```
## Scheduled Tasks
Daily at midnight (00:00 WIB):
```bash
php artisan perizinan:sync --fastest
```
## Data Access Examples
### Using DashboardHelper:
```php
// Get fastest data for dashboard
$fastestData = DashboardHelper::getAllFastestData();
// Get fastest data for specific type
$pertekFastest = DashboardHelper::getFastestPermohonanByType('pertek');
```
### Using Model Directly:
```php
// Get today's data for PERTEK
$pertek = FastestPermohonan::getLatestByKategori('pertek');
// Get data for specific date
$data = FastestPermohonan::getByKategoriAndDate('amdal', '2025-07-14');
```
## Data Flow
1. **API Call**: Service fetches data from Jakarta API
2. **Data Validation**: Check API response success
3. **Database Sync**:
- Delete existing data for today (to ensure fresh ranking)
- Insert new data with ranking based on API order
4. **Dashboard Display**: Helper methods format data for frontend
## Production Deployment
Data akan tersync otomatis setiap hari jam 12 malam melalui Laravel Scheduler di production server.
## Notes
- Data di-refresh setiap hari untuk memastikan ranking terbaru
- Ranking ditentukan berdasarkan urutan dari API response
- Fallback data tersedia jika API tidak tersedia
- Support untuk kategori 'pertek' dan 'amdal' sesuai endpoint yang tersedia