Initial V2 commit

This commit is contained in:
Hamza-Ayed
2026-04-22 21:59:56 +03:00
commit 4706404488
53 changed files with 4392 additions and 0 deletions

View 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);
}
}