27 lines
1.3 KiB
PHP
27 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Services\InvestmentGeography;
|
|
use Illuminate\Http\JsonResponse;
|
|
use Illuminate\Http\Request;
|
|
|
|
class PublicGeographyController extends Controller
|
|
{
|
|
public function options(Request $request, InvestmentGeography $geography): JsonResponse
|
|
{
|
|
$data = $request->validate(['type' => ['required', 'in:province,district,admin_post,locality'], 'parent_id' => ['nullable', 'uuid'], 'q' => ['nullable', 'string', 'max:100'], 'page' => ['nullable', 'integer', 'min:1']]);
|
|
$query = $geography->publicReferences()->where('location_type', $data['type']);
|
|
if ($data['type'] !== 'province') {
|
|
$parentType = ['district' => 'province', 'admin_post' => 'district', 'locality' => 'admin_post'][$data['type']];
|
|
$parent = $geography->publicReferences()->where('id', $data['parent_id'] ?? '00000000-0000-0000-0000-000000000000')->where('location_type', $parentType)->value('id');
|
|
$query->where('parent_id', $parent ?? '00000000-0000-0000-0000-000000000000');
|
|
}
|
|
if (! empty($data['q'])) {
|
|
$query->whereRaw('name ILIKE ?', ['%'.addcslashes($data['q'], '%_\\').'%']);
|
|
}
|
|
|
|
return response()->json($query->orderBy('name')->orderBy('id')->paginate(100, ['id', 'name', 'parent_id', 'location_type']));
|
|
}
|
|
}
|