1
0

LikeController.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Jobs\LikePipeline\LikePipeline;
  4. use App\Like;
  5. use App\Status;
  6. use App\User;
  7. use Auth;
  8. use Cache;
  9. use Illuminate\Http\Request;
  10. use App\Services\StatusService;
  11. class LikeController extends Controller
  12. {
  13. public function __construct()
  14. {
  15. $this->middleware('auth');
  16. }
  17. public function store(Request $request)
  18. {
  19. $this->validate($request, [
  20. 'item' => 'required|integer|min:1',
  21. ]);
  22. $user = Auth::user();
  23. $profile = $user->profile;
  24. $status = Status::findOrFail($request->input('item'));
  25. $count = $status->likes()->count();
  26. if ($status->likes()->whereProfileId($profile->id)->count() !== 0) {
  27. $like = Like::whereProfileId($profile->id)->whereStatusId($status->id)->firstOrFail();
  28. $like->forceDelete();
  29. $count--;
  30. $status->likes_count = $count;
  31. $status->save();
  32. } else {
  33. $like = Like::firstOrCreate([
  34. 'profile_id' => $user->profile_id,
  35. 'status_id' => $status->id
  36. ]);
  37. if($like->wasRecentlyCreated == true) {
  38. $count++;
  39. $status->likes_count = $count;
  40. $like->status_profile_id = $status->profile_id;
  41. $like->is_comment = in_array($status->type, [
  42. 'photo',
  43. 'photo:album',
  44. 'video',
  45. 'video:album',
  46. 'photo:video:album'
  47. ]) == false;
  48. $like->save();
  49. $status->save();
  50. LikePipeline::dispatch($like);
  51. }
  52. }
  53. Cache::forget('status:'.$status->id.':likedby:userid:'.$user->id);
  54. StatusService::del($status->id);
  55. if ($request->ajax()) {
  56. $response = ['code' => 200, 'msg' => 'Like saved', 'count' => 0];
  57. } else {
  58. $response = redirect($status->url());
  59. }
  60. return $response;
  61. }
  62. }