1
0

LikeController.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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. // API deprecated
  24. return;
  25. $user = Auth::user();
  26. $profile = $user->profile;
  27. $status = Status::findOrFail($request->input('item'));
  28. if (Like::whereStatusId($status->id)->whereProfileId($profile->id)->exists()) {
  29. $like = Like::whereProfileId($profile->id)->whereStatusId($status->id)->firstOrFail();
  30. UnlikePipeline::dispatch($like);
  31. } else {
  32. abort_if(
  33. Like::whereProfileId($user->profile_id)
  34. ->where('created_at', '>', now()->subDay())
  35. ->count() >= Like::MAX_PER_DAY,
  36. 429
  37. );
  38. $count = $status->likes_count > 4 ? $status->likes_count : $status->likes()->count();
  39. $like = Like::firstOrCreate([
  40. 'profile_id' => $user->profile_id,
  41. 'status_id' => $status->id
  42. ]);
  43. if($like->wasRecentlyCreated == true) {
  44. $count++;
  45. $status->likes_count = $count;
  46. $like->status_profile_id = $status->profile_id;
  47. $like->is_comment = in_array($status->type, [
  48. 'photo',
  49. 'photo:album',
  50. 'video',
  51. 'video:album',
  52. 'photo:video:album'
  53. ]) == false;
  54. $like->save();
  55. $status->save();
  56. LikePipeline::dispatch($like);
  57. }
  58. }
  59. Cache::forget('status:'.$status->id.':likedby:userid:'.$user->id);
  60. StatusService::refresh($status->id);
  61. if ($request->ajax()) {
  62. $response = ['code' => 200, 'msg' => 'Like saved', 'count' => 0];
  63. } else {
  64. $response = redirect($status->url());
  65. }
  66. return $response;
  67. }
  68. }