perling/FASTEST_INTEGRATION.md

3.8 KiB

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

- 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

{
    "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:

php artisan perizinan:sync                    # All categories
php artisan perizinan:sync pertek             # Specific category

Sync Status + Fastest Data:

php artisan perizinan:sync --fastest          # All categories
php artisan perizinan:sync pertek --fastest   # Specific category

Check Data:

php artisan perizinan:check

Scheduled Tasks

Daily at midnight (00:00 WIB):

php artisan perizinan:sync --fastest

Data Access Examples

Using DashboardHelper:

// Get fastest data for dashboard
$fastestData = DashboardHelper::getAllFastestData();

// Get fastest data for specific type
$pertekFastest = DashboardHelper::getFastestPermohonanByType('pertek');

Using Model Directly:

// 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