Esempio n. 1
0
 /**
  * Ritorna la lista degli abbracci effettuati dall'utente.
  * Gestisce anche la paginazione automaticamente.
  *
  * @param Request $request
  *
  * @return \Illuminate\Http\JsonResponse
  */
 public function getList(Request $request)
 {
     $user = $this->getAuthenticatedUser();
     $hugs = Hug::where(function ($query) use($request) {
         /**
          * @var Builder $query
          */
         $query->whereNull('closed_at')->orWhere(function ($query) {
             /**
              * @var Builder $query
              */
             $query->whereNotNull('closed_at')->where('closed_at', '>=', Carbon::now()->subHours(24)->toDateTimeString());
             // Abbracci conclusi
         });
     })->where(function ($query) use($user) {
         /**
          * @var Builder $query
          */
         $query->where('user_seeker_id', '=', $user->id)->orWhere('user_sought_id', '=', $user->id);
     })->paginate(20);
     $response = json_decode($hugs->toJson());
     $response->list = $response->data;
     unset($response->data);
     return parent::response($response);
 }
Esempio n. 2
0
 /**
  * Serve per rinnovare il checkIn da parte di utente quando l'abbraccio è in corso.
  *
  * @param Hug  $hug
  * @param User $user
  */
 private function checkIn(Hug $hug, User $user)
 {
     if ($user->id == $hug->user_seeker_id) {
         $hug->user_seeker_last_checkin = Carbon::now()->toDateTimeString();
     } else {
         $hug->user_sought_last_checkin = Carbon::now()->toDateTimeString();
     }
     $hug->save();
 }
Esempio n. 3
0
 /**
  * Controlla se l'utente può avviare la ricerca.
  *
  * Un utente non può avviare una ricerca quando:
  *  - Ha già una ricerca in corso.
  *  - Ha già un abbraccio in corso
  *  - Non ha lasciato il feedback per un'altro abbraccio concluso.
  *
  * @param User $user
  *
  * @throws UserCannotLaunchSearchException
  */
 private function checkIfUserCanLaunchSearch(User $user)
 {
     $search = Search::whereUserId($user->id)->whereNull('finished_at')->first();
     if ($search instanceof Search) {
         throw new UserCannotLaunchSearchException("Un'altra ricerca è in corso - Search id: {$search->id}");
     }
     $hug = Hug::whereNull('closed_at')->where(function ($query) use($user) {
         /**
          * @var Builder $query
          */
         $query->where('user_seeker_id', '=', $user->id)->orWhere('user_sought_id', '=', $user->id);
     })->first();
     if ($hug instanceof Hug) {
         throw new UserCannotLaunchSearchException("E' coinvolto in un'altro abbraccio - Hug id: {$hug->id}");
     }
     $hugWithOutFeedBack = DB::table('hugs AS HUG')->leftJoin('user_hug_feedbacks AS FEEDBACK_AS_SEEKER', function ($join) {
         /**
          * @var JoinClause $join
          */
         $join->on('HUG.user_seeker_id', '=', 'FEEDBACK_AS_SEEKER.user_id')->on('HUG.id', '=', 'FEEDBACK_AS_SEEKER.hug_id');
     })->leftJoin('user_hug_feedbacks AS FEEDBACK_AS_SOUGHT', function ($join) {
         /**
          * @var JoinClause $join
          */
         $join->on('HUG.user_sought_id', '=', 'FEEDBACK_AS_SOUGHT.user_id')->on('HUG.id', '=', 'FEEDBACK_AS_SOUGHT.hug_id');
     })->whereNotNull('HUG.closed_at')->whereNull('FEEDBACK_AS_SEEKER.id')->whereNull('FEEDBACK_AS_SOUGHT.id')->where(function ($query) use($user) {
         /**
          * @var Builder $query
          */
         $query->where('HUG.user_seeker_id', '=', $user->id)->orWhere('HUG.user_sought_id', '=', $user->id);
     })->first(['HUG.*']);
     if (!empty($hugWithOutFeedBack)) {
         throw new UserCannotLaunchSearchException("Non ha lasciato il feedback per un abbraccio concluso - Hug id: {$hugWithOutFeedBack->id}");
     }
 }