Initial V2 commit
This commit is contained in:
71
app/Http/Controllers/PlaceController.php
Normal file
71
app/Http/Controllers/PlaceController.php
Normal file
@@ -0,0 +1,71 @@
|
||||
<?php
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
|
||||
/**
|
||||
* Place Controller
|
||||
* Replaces: ride/places/add.php, ride/places_syria/*.php
|
||||
*/
|
||||
class PlaceController extends Controller
|
||||
{
|
||||
/** GET /v2/places/search?q=XXX&lat=XX&lng=XX */
|
||||
public function search(Request $request): JsonResponse
|
||||
{
|
||||
$q = $request->input('q', '');
|
||||
$lat = $request->input('lat');
|
||||
$lng = $request->input('lng');
|
||||
$limit = min((int) $request->input('limit', 20), 50);
|
||||
|
||||
$query = DB::connection('primary')->table('palces11');
|
||||
|
||||
if (!empty($q)) {
|
||||
// Fulltext search (palces11 has FULLTEXT index)
|
||||
$query->whereRaw(
|
||||
"MATCH(name, name_ar, name_en, address, category) AGAINST(? IN BOOLEAN MODE)",
|
||||
[$q . '*']
|
||||
);
|
||||
}
|
||||
|
||||
// If coordinates provided, sort by distance
|
||||
if ($lat && $lng) {
|
||||
$query->selectRaw("*,
|
||||
ST_Distance_Sphere(
|
||||
POINT(CAST(longitude AS DECIMAL(10,7)), CAST(latitude AS DECIMAL(10,7))),
|
||||
POINT(?, ?)
|
||||
) AS distance_meters", [(float)$lng, (float)$lat])
|
||||
->orderBy('distance_meters');
|
||||
}
|
||||
|
||||
$places = $query->limit($limit)->get();
|
||||
|
||||
return response()->json(['status' => 'success', 'data' => $places]);
|
||||
}
|
||||
|
||||
/** POST /v2/places */
|
||||
public function store(Request $request): JsonResponse
|
||||
{
|
||||
$request->validate([
|
||||
'latitude' => 'required|numeric',
|
||||
'longitude' => 'required|numeric',
|
||||
'name' => 'required|string|max:180',
|
||||
'category' => 'required|string|max:55',
|
||||
]);
|
||||
|
||||
DB::connection('primary')->table('palces11')->insert([
|
||||
'latitude' => $request->input('latitude'),
|
||||
'longitude' => $request->input('longitude'),
|
||||
'name' => $request->input('name'),
|
||||
'name_ar' => $request->input('name_ar'),
|
||||
'name_en' => $request->input('name_en'),
|
||||
'address' => $request->input('address'),
|
||||
'category' => $request->input('category'),
|
||||
'created_at' => now(),
|
||||
]);
|
||||
|
||||
return response()->json(['status' => 'success'], 201);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user