FollowerController.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\{
  4. Follower,
  5. FollowRequest,
  6. Profile,
  7. UserFilter
  8. };
  9. use Auth;
  10. use Illuminate\Http\Request;
  11. use App\Jobs\FollowPipeline\FollowPipeline;
  12. class FollowerController extends Controller
  13. {
  14. public function __construct()
  15. {
  16. $this->middleware('auth');
  17. }
  18. public function store(Request $request)
  19. {
  20. $this->validate($request, [
  21. 'item' => 'required|integer',
  22. ]);
  23. $item = $request->input('item');
  24. $this->handleFollowRequest($item);
  25. return redirect()->back();
  26. }
  27. protected function handleFollowRequest($item)
  28. {
  29. $user = Auth::user()->profile;
  30. $target = Profile::where('id', '!=', $user->id)->findOrFail($item);
  31. $private = (bool) $target->is_private;
  32. $blocked = UserFilter::whereUserId($target->id)
  33. ->whereFilterType('block')
  34. ->whereFilterableId($user->id)
  35. ->whereFilterableType('App\Profile')
  36. ->exists();
  37. if($blocked == true) {
  38. return redirect()->back()->with('error', 'You cannot follow this user.');
  39. }
  40. $isFollowing = Follower::whereProfileId($user->id)->whereFollowingId($target->id)->count();
  41. if($private == true && $isFollowing == 0) {
  42. $follow = FollowRequest::firstOrCreate([
  43. 'follower_id' => $user->id,
  44. 'following_id' => $target->id
  45. ]);
  46. } elseif ($isFollowing == 0) {
  47. $follower = new Follower();
  48. $follower->profile_id = $user->id;
  49. $follower->following_id = $target->id;
  50. $follower->save();
  51. FollowPipeline::dispatch($follower);
  52. } else {
  53. $follower = Follower::whereProfileId($user->id)->whereFollowingId($target->id)->firstOrFail();
  54. $follower->delete();
  55. }
  56. }
  57. }