1
0

LikeController.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Jobs\LikePipeline\LikePipeline;
  4. use App\Jobs\LikePipeline\UnlikePipeline;
  5. use App\Like;
  6. use App\Status;
  7. use App\User;
  8. use Auth;
  9. use Cache;
  10. use Illuminate\Http\Request;
  11. use App\Services\StatusService;
  12. class LikeController 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|min:1',
  22. ]);
  23. abort(422, 'Deprecated API Endpoint');
  24. $user = Auth::user();
  25. $profile = $user->profile;
  26. $status = Status::findOrFail($request->input('item'));
  27. if (Like::whereStatusId($status->id)->whereProfileId($profile->id)->exists()) {
  28. $like = Like::whereProfileId($profile->id)->whereStatusId($status->id)->firstOrFail();
  29. UnlikePipeline::dispatch($like)->onQueue('feed');
  30. } else {
  31. abort_if(
  32. Like::whereProfileId($user->profile_id)
  33. ->where('created_at', '>', now()->subDay())
  34. ->count() >= Like::MAX_PER_DAY,
  35. 429
  36. );
  37. $count = $status->likes_count > 4 ? $status->likes_count : $status->likes()->count();
  38. $like = Like::firstOrCreate([
  39. 'profile_id' => $user->profile_id,
  40. 'status_id' => $status->id
  41. ]);
  42. if($like->wasRecentlyCreated == true) {
  43. $count++;
  44. $status->likes_count = $count;
  45. $like->status_profile_id = $status->profile_id;
  46. $like->is_comment = in_array($status->type, [
  47. 'photo',
  48. 'photo:album',
  49. 'video',
  50. 'video:album',
  51. 'photo:video:album'
  52. ]) == false;
  53. $like->save();
  54. $status->save();
  55. LikePipeline::dispatch($like)->onQueue('feed');
  56. }
  57. }
  58. Cache::forget('status:'.$status->id.':likedby:userid:'.$user->id);
  59. StatusService::refresh($status->id);
  60. if ($request->ajax()) {
  61. $response = ['code' => 200, 'msg' => 'Like saved', 'count' => 0];
  62. } else {
  63. $response = redirect($status->url());
  64. }
  65. return $response;
  66. }
  67. }