Beispiel #1
0
 /**
  * L'utente inizia la ricerca.
  * Input:
  *      - Cordinate dell'utente nel momento della richiesta
  * Output:
  *      - Dettagli di ricerca
  *
  *
  * @param Request $request
  *
  * @return \Illuminate\Http\JsonResponse
  * @throws Exception
  */
 public function begin(Request $request)
 {
     try {
         $this->validate($request, ['geoLocalization.latitude' => 'required|regex:/^(-)?[0-9]{1,3}\\.[0-9]{1,7}+$/', 'geoLocalization.longitude' => 'required|regex:/^(-)?[0-9]{1,3}\\.[0-9]{1,7}+$/']);
     } catch (ValidationException $e) {
         $errors = $e->getErrors();
         return parent::response([], $errors);
     }
     $data = $request->only(['geoLocalization.latitude', 'geoLocalization.longitude']);
     $user = $this->getAuthenticatedUser();
     if ($user === null) {
         // Utente non autorizzato
         abort(403);
     }
     $this->checkIfUserCanLaunchSearch($user);
     // Creo istanza di ricerca
     $search = new Search();
     $search->user_id = $user->id;
     $search->max_duration = 600;
     // 10 minuti //$user->max_duration;
     $search->max_distance = 10000;
     // 10.000 KM //$user->max_distance;
     $search->geo_latitude = $data['geoLocalization']['latitude'];
     $search->geo_longitude = $data['geoLocalization']['longitude'];
     $search->ip = $request->ip();
     $search->save();
     // Aggiorno posizione dell'utente
     $user->geo_last_update = new Carbon();
     $user->geo_latitude = $data['geoLocalization']['latitude'];
     $user->geo_longitude = $data['geoLocalization']['longitude'];
     // Creo una nuova lista di ricerca
     $search->createNewList();
     // Si inizia!
     $inProgress = $this->process($search);
     if ($inProgress === true) {
         // Aggiorno status dell'utente
         $user->status = User::STATUS_SEARCHING;
     }
     // Salvo l'utente
     $user->save();
     return parent::response(['search' => $search, 'inProgress' => $inProgress, 'nextKeepAlive' => Search::KEEP_ALIVE_INTERVAL]);
 }