File manager - Edit - /var/www/html/ciosp/api/app/Http/Services/ProeisAssumptionService.php
Back
<?php namespace App\Http\Services; use App\Classes\BaseServiceResponse; use App\Http\Requests\ProeisAssumptionRequest; use App\Http\Requests\ProeisAssumptionOpenRequest; use App\Http\Requests\ProeisAssumptionCloseRequest; use App\Http\Resources\ProeisAssumptionCollection; use App\Http\Resources\ProeisAssumptionResource; use App\Models\ProeisAssumption; use App\Models\ServiceStation; use Carbon\Carbon; use Illuminate\Http\JsonResponse; class ProeisAssumptionService extends BaseService { public function index(): BaseServiceResponse { $proeisAssumptions = ProeisAssumption::all(); return $this->success( new ProeisAssumptionCollection($proeisAssumptions) ); } public function store(ProeisAssumptionOpenRequest $request): BaseServiceResponse { $data = $request->all(); $latitudeUser = $data['latitude']; $longitudeUser = $data['longitude']; $stationId = $data['station_id']; $station = ServiceStation::find($stationId); if(!$station){ return $this->error([] ,404, 'Station not found'); } $latitudeStation = $station->latitude; $longitudeStation = $station->longitude; $date = Carbon::create($data['date']); $isUserInStationRange = $this->areCoordinatesWithinDistance($latitudeUser, $longitudeUser, $latitudeStation, $longitudeStation); if(!$isUserInStationRange){ return $this->error([] ,400, 'The user is not in the police station range'); } $data['ocurrences'] = json_encode($data['ocurrences'] ?? null); $newProeisAssumption = ProeisAssumption::create($data); return $this->success( ['proeisAssumption' => new ProeisAssumptionResource($newProeisAssumption)], JsonResponse::HTTP_CREATED ); } public function show(ProeisAssumption $proeisAssumption): BaseServiceResponse { return $this->success( ['proeisAssumption' => new ProeisAssumptionResource($proeisAssumption)] ); } public function update(ProeisAssumptionRequest $request, ProeisAssumption $proeisAssumption): BaseServiceResponse { $proeisAssumption->fill($request->all())->save(); return $this->success( ['proeisAssumption' => new ProeisAssumptionResource($proeisAssumption)] ); } public function destroy(ProeisAssumption $proeisAssumption): BaseServiceResponse { $proeisAssumption->forceDelete(); return $this->success(null, JsonResponse::HTTP_NO_CONTENT); } public function closeAssumption(ProeisAssumptionCloseRequest $request): BaseServiceResponse{ $data = $request->all(); $userId = $data['user_id']; $proeisAssumption = ProeisAssumption::where('user_id', $userId)->whereNull('close_date')->first(); if(!$proeisAssumption){ return $this->error([] ,404, 'There is no open assumption for this user'); } // $date = Carbon::create($proeisAssumption->date); $closeDate = $data['close_date'] ? Carbon::create($data['close_date']) : null; if($closeDate && $closeDate->lt($proeisAssumption->date)) { return $this->error([] ,400, 'Close date cannot be earlier than open date'); } $data['ocurrences'] = json_encode($data['ocurrences'] ?? null); $proeisAssumption->fill([ 'close_date' => $closeDate, 'close_latitude' => $data['close_latitude'] ?? null, 'close_longitude' => $data['close_longitude'] ?? null, 'ocurrences' => $data['ocurrences'] ?? null, ]); $proeisAssumption->save(); return $this->success( [], JsonResponse::HTTP_NO_CONTENT ); } private const MAX_DISTANCE_TO_POLICE_STATION = 50; private function areCoordinatesWithinDistance($latitudeUser, $longitudeUser, $latitudeStation, $longitudeStation, $distance = self::MAX_DISTANCE_TO_POLICE_STATION) { $earthRadius = 6378137; $latUser = deg2rad($latitudeUser); $lonUser = deg2rad($longitudeUser); $latStation = deg2rad($latitudeStation); $lonStation = deg2rad($longitudeStation); $latDelta = $latStation - $latUser; $lonDelta = $lonStation - $lonUser; $angle = 2 * asin(sqrt(pow(sin($latDelta / 2), 2) + cos($latUser) * cos($latStation) * pow(sin($lonDelta / 2), 2))); $distanceBetween = $angle * $earthRadius; return $distanceBetween <= $distance; } }
| ver. 1.4 |
Github
|
.
| PHP 8.3.28 | Generation time: 0.01 |
proxy
|
phpinfo
|
Settings