Menambah fitur batas wilayah desa pada peta#624
Menambah fitur batas wilayah desa pada peta#624pandigresik wants to merge 8 commits intorilis-devfrom
Conversation
routes/api.php
Outdated
| // Wilayah Boundaries API | ||
| Route::prefix('boundaries') | ||
| ->group(function () { | ||
| // Static routes first (before dynamic {kode} route) | ||
| Route::get('/geojson', [WilayahBoundaryController::class, 'geojson']); | ||
| Route::get('/search', [WilayahBoundaryController::class, 'search']); | ||
| Route::get('/stats', [WilayahBoundaryController::class, 'stats']); | ||
|
|
||
| // Dynamic routes last | ||
| Route::get('/', [WilayahBoundaryController::class, 'index']); | ||
| Route::get('/{kode}', [WilayahBoundaryController::class, 'show']); | ||
| }); | ||
|
|
There was a problem hiding this comment.
tambahkan middleware tracksid, jika endpoint tersebut digunakan juga untuk internal gunakan middleware ['auth:sanctum', 'ability:pantau-wilayah'] atau ['auth:sanctum', 'ability:pantau-track'] lihat contoh pada routes/apiv1.php
There was a problem hiding this comment.
terjadi error
Declaration of App\Http\Resources\WilayahBoundaryResource::toArray(Illuminate\Http\Request $request): array must be compatible with Illuminate\Http\Resources\Json\JsonResource::toArray($request)There was a problem hiding this comment.
terjadi error
Declaration of App\Http\Resources\WilayahBoundaryResource::toArray(Illuminate\Http\Request $request): array must be compatible with Illuminate\Http\Resources\Json\JsonResource::toArray($request)
ini error ketika apa ?
There was a problem hiding this comment.
tambahkan middleware tracksid, jika endpoint tersebut digunakan juga untuk internal gunakan middleware ['auth:sanctum', 'ability:pantau-wilayah'] atau ['auth:sanctum', 'ability:pantau-track'] lihat contoh pada
routes/apiv1.php
route boundaries memang bisa diakses secara public, salah satu penerapannya pada pantau juga di halaman public contoh path /peta (bisa cek di routes/web.php baris 118)
Jadi dengan kondisi seperti ini tidak perlu ditambahkan middleware
There was a problem hiding this comment.
Lihat penggunaan api wilayah, semuanya diatur menggunakan middleware tracksid
’’’php
Route::prefix('wilayah')
->middleware('tracksid')
->group(function () {
Route::get('region', [WilayahController::class, 'regionData']);
Route::get('desa', [WilayahController::class, 'desa']);
Route::get('caridesa', [WilayahController::class, 'cariDesa']);
Route::get('carikabupaten', [WilayahController::class, 'cariKabupaten']);
Route::get('ambildesa', [WilayahController::class, 'ambilDesa']);
Route::get('kodedesa', [WilayahController::class, 'kodeDesa']);
Route::get('kodekecamatan', [WilayahController::class, 'kodeKecamatan']);
Route::get('list_wilayah', [WilayahController::class, 'listWilayah']);
Route::get('kabupaten-desa', [WilayahController::class, 'kabupatenDesa']);
Route::get('suku', [SukuController::class, 'index']);
Route::get('marga', [MargaController::class, 'index']);
Route::get('adat', [AdatController::class, 'index']);
Route::get('pekerjaan-pmi', [PekerjaanPmiController::class, 'index']);
});
’’’
perbaikan issue #617
The Wilayah Boundaries feature has been successfully implemented, tested, and populated with real data from wilayah_boundaries-main repository.
📚 References
Key Achievements:
namacolumn📊 Database Status
Migration Status
Test Summary
Unit Tests (9 tests) -
tests/Unit/Models/WilayahBoundaryTest.phpFeature Tests (11 tests) -
tests/Feature/Api/WilayahBoundaryApiTest.php🔌 API Endpoints Verified
1. List Boundaries
2. Get Single Boundary
GET /api/boundaries/{kode} ✅ Tested - Returns single boundary with region relationship3. Get GeoJSON
GET /api/boundaries/geojson?level={level} ✅ Tested - Returns GeoJSON FeatureCollection (cached 1 hour) Headers: Content-Type: application/geo+json Validation: WilayahBoundaryGeojsonRequest4. Search Boundaries
5. Get Statistics
GET /api/boundaries/stats ✅ Tested - Returns count by level Response: { "provinsi": 38, "kabupaten": 514, "kecamatan": 7282, "kelurahan": 0, "total": 7834 }📦 Import Process
Command Used
Import Statistics
Note: Final database count is 7,834 because SQL files contain multiple INSERT statements per file.
Source Data Location
🔧 Technical Implementation
Files Created/Modified
Database (3 files)
database/migrations/2026_02_22_090341_create_wilayah_boundaries_table.phpnamacolumn (varchar(100), nullable)database/migrations/2026_02_22_113550_seed_wilayah_boundaries_data.phpdatabase/seeders/WilayahBoundarySeeder.phpModels (2 files)
app/Models/WilayahBoundary.phpnamafield to $fillable arrayapp/Models/Region.phpAPI (6 files)
app/Http/Controllers/Api/WilayahBoundaryController.phpapp/Http/Resources/WilayahBoundaryResource.phpapp/Http/Requests/Api/WilayahBoundaryIndexRequest.php(NEW)app/Http/Requests/Api/WilayahBoundarySearchRequest.php(NEW)app/Http/Requests/Api/WilayahBoundaryGeojsonRequest.php(NEW)routes/api.php/api/boundaries/geojson/{level}/api/boundaries/geojson?level={level}Console (1 file)
app/Console/Commands/ImportWilayahBoundaries.phpFrontend (2 files)
resources/views/peta/boundary-layer.blade.phpresources/views/peta/index.blade.phpTests (2 files)
tests/Unit/Models/WilayahBoundaryTest.phptests/Feature/Api/WilayahBoundaryApiTest.php🎨 Frontend Integration
Leaflet Map Component
resources/views/peta/boundary-layer.blade.phpUsage Example
⚡ Performance Metrics
Import Performance
API Response Times (Expected)
/api/boundaries/api/boundaries/{kode}/api/boundaries/geojson?level=prov/api/boundaries/geojson?level=kab/api/boundaries/statsDatabase Query Performance
kode(PRIMARY),level(INDEX)🚀 How to Use
1. View Statistics
2. Get Provinsi Boundaries as GeoJSON
curl http://localhost:8000/api/boundaries/geojson?level=prov3. Search for Specific Region
curl "http://localhost:8000/api/boundaries/search?q=Jakarta"4. View on Map
🔍 Validation Improvements
FormRequest Classes Added
WilayahBoundaryIndexRequest
WilayahBoundarySearchRequest
WilayahBoundaryGeojsonRequest
Benefits
Kelurahan Data: Kelurahan/Desa boundaries not available in source directory
Test Data Isolation: Tests use TEST_ prefix to avoid conflicts with real data
Large GeoJSON: Provinsi GeoJSON ~1.8MB, Kabupaten ~15MB
📞 Support
Verification Commands