2023-06-14 11:32:24 +02:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
namespace App\Http\Controllers\Fo;
|
|
|
|
|
|
|
|
|
|
use App\Http\Controllers\Controller;
|
2023-06-15 12:08:37 +02:00
|
|
|
use App\Http\Requests\Fo\Shop\GetNearestShopRequest;
|
2023-06-14 11:32:24 +02:00
|
|
|
use App\Models\Shop;
|
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
|
|
|
|
|
|
class ShopController extends Controller
|
|
|
|
|
{
|
|
|
|
|
// * FUNCTIONS FOR FRONT MARKET FINDER
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get all shops
|
|
|
|
|
* @return json
|
|
|
|
|
*/
|
2023-06-15 12:08:37 +02:00
|
|
|
public function index()
|
2023-06-14 11:32:24 +02:00
|
|
|
{
|
2023-06-15 12:08:37 +02:00
|
|
|
if (request()->wantsJson()) {
|
|
|
|
|
return response()
|
|
|
|
|
->json(Shop::all());
|
|
|
|
|
}
|
|
|
|
|
return abort(404);
|
2023-06-14 11:32:24 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get the 5 nearest shops with the given coords in the request.
|
2023-06-15 12:08:37 +02:00
|
|
|
* @param App\Http\Requests\Fo\Shop\GetNearestShopRequest $request
|
2023-06-14 11:32:24 +02:00
|
|
|
* @return json
|
|
|
|
|
*/
|
2023-06-15 12:08:37 +02:00
|
|
|
public function getNearest(GetNearestShopRequest $request)
|
2023-06-14 11:32:24 +02:00
|
|
|
{
|
2023-06-15 12:08:37 +02:00
|
|
|
$latitude = $request->latitude;
|
|
|
|
|
$longitude = $request->longitude;
|
2023-06-14 11:32:24 +02:00
|
|
|
$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();
|
2023-06-15 12:08:37 +02:00
|
|
|
|
|
|
|
|
if ($request->wantsJson()) {
|
|
|
|
|
return response()
|
|
|
|
|
->json($results);
|
|
|
|
|
}
|
|
|
|
|
return abort(404);
|
2023-06-14 11:32:24 +02:00
|
|
|
}
|
|
|
|
|
}
|