ldc-lionor/app/Http/Controllers/Fo/ShopController.php
noah.lancien 8278419606 Phpstan
2024-09-06 08:30:55 +00:00

52 lines
1.5 KiB
PHP

<?php
namespace App\Http\Controllers\Fo;
use App\Http\Controllers\Controller;
use App\Http\Requests\Fo\Shop\GetNearestShopRequest;
use App\Models\Shop;
use Illuminate\Support\Facades\DB;
class ShopController extends Controller
{
// * FUNCTIONS FOR FRONT MARKET FINDER
/**
* Get all shops
*
* @return \Illuminate\Http\JsonResponse
*/
public function index(): \Illuminate\Http\JsonResponse
{
if (request()->wantsJson()) {
return response()
->json(Shop::all());
}
return abort(404);
}
/**
* Get the 5 nearest shops with the given coords in the request.
*
* @param \App\Http\Requests\Fo\Shop\GetNearestShopRequest $request
* @return \Illuminate\Http\JsonResponse
*/
public function getNearest(GetNearestShopRequest $request): \Illuminate\Http\JsonResponse
{
if (!$request->wantsJson()) {
return abort(404);
}
$latitude = $request->latitude;
$longitude = $request->longitude;
$raw = DB::raw(
'ROUND ((6371*acos(cos(radians(' . $latitude . '))*cos(radians(latitude))*cos(radians(longitude)
- radians(' . $longitude . '))+sin(radians(' . $latitude . '))*sin(radians(latitude)))), 2)
AS distance'
);
$results = DB::table("shops")->select('*')->addSelect($raw)->orderBy('distance', 'ASC')->limit(5)->get();
return response()
->json($results);
}
}