FollowerController.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. if($request->wantsJson()) {
  26. return response()->json([
  27. 200
  28. ], 200);
  29. }
  30. return redirect()->back();
  31. }
  32. protected function handleFollowRequest($item)
  33. {
  34. $user = Auth::user()->profile;
  35. $target = Profile::where('id', '!=', $user->id)->findOrFail($item);
  36. $private = (bool) $target->is_private;
  37. $blocked = UserFilter::whereUserId($target->id)
  38. ->whereFilterType('block')
  39. ->whereFilterableId($user->id)
  40. ->whereFilterableType('App\Profile')
  41. ->exists();
  42. if($blocked == true) {
  43. return redirect()->back()->with('error', 'You cannot follow this user.');
  44. }
  45. $isFollowing = Follower::whereProfileId($user->id)->whereFollowingId($target->id)->count();
  46. if($private == true && $isFollowing == 0) {
  47. $follow = FollowRequest::firstOrCreate([
  48. 'follower_id' => $user->id,
  49. 'following_id' => $target->id
  50. ]);
  51. } elseif ($isFollowing == 0) {
  52. $follower = new Follower();
  53. $follower->profile_id = $user->id;
  54. $follower->following_id = $target->id;
  55. $follower->save();
  56. FollowPipeline::dispatch($follower);
  57. } else {
  58. $follower = Follower::whereProfileId($user->id)->whereFollowingId($target->id)->firstOrFail();
  59. $follower->delete();
  60. }
  61. }
  62. }