middleware('auth'); } public function store(Request $request) { $this->validate($request, [ 'item' => 'required|integer', ]); $item = $request->input('item'); $this->handleFollowRequest($item); if($request->wantsJson()) { return response()->json([ 200 ], 200); } return redirect()->back(); } protected function handleFollowRequest($item) { $user = Auth::user()->profile; $target = Profile::where('id', '!=', $user->id)->findOrFail($item); $private = (bool) $target->is_private; $blocked = UserFilter::whereUserId($target->id) ->whereFilterType('block') ->whereFilterableId($user->id) ->whereFilterableType('App\Profile') ->exists(); if($blocked == true) { return redirect()->back()->with('error', 'You cannot follow this user.'); } $isFollowing = Follower::whereProfileId($user->id)->whereFollowingId($target->id)->count(); if($private == true && $isFollowing == 0) { $follow = FollowRequest::firstOrCreate([ 'follower_id' => $user->id, 'following_id' => $target->id ]); } elseif ($isFollowing == 0) { $follower = new Follower(); $follower->profile_id = $user->id; $follower->following_id = $target->id; $follower->save(); FollowPipeline::dispatch($follower); } else { $follower = Follower::whereProfileId($user->id)->whereFollowingId($target->id)->firstOrFail(); $follower->delete(); } } }