LikeController.php 1.6 KB

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