151 lines
3.8 KiB
Markdown
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
|