like = $like; } public function middleware() { return [ (new WithoutOverlapping("unlike:{$this->like->status_id}:{$this->like->profile_id}")) ->releaseAfter(10) ->expireAfter(60), ]; } public function uniqueId() { return "unlike:{$this->like->status_id}:{$this->like->profile_id}"; } public function handle() { $like = $this->like; $status = $like->status; $actor = $like->actor; if (! $status) { return; } DB::transaction(function () use ($status, $actor, $like) { if ($status->likes_count > 0) { $status->decrement('likes_count'); } Notification::whereProfileId($status->profile_id) ->whereActorId($actor->id) ->whereAction('like') ->whereItemId($status->id) ->whereItemType(Status::class) ->chunkById(100, function ($notifications) { foreach ($notifications as $notification) { $notification->forceDelete(); } }); $like->forceDelete(); }); if ($actor->id !== $status->profile_id && $status->url && $actor->domain == null) { $this->remoteLikeDeliver(); } StatusService::refresh($status->id); } public function remoteLikeDeliver() { $like = $this->like; $status = $like->status; $actor = $like->actor; $fractal = new Fractal\Manager; $fractal->setSerializer(new ArraySerializer); $resource = new Fractal\Resource\Item($like, new LikeTransformer); $activity = $fractal->createData($resource)->toArray(); $url = $status->profile->sharedInbox ?? $status->profile->inbox_url; Helpers::sendSignedObject($actor, $url, $activity); } }