123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- <?php
- namespace App\Jobs\FollowPipeline;
- use App\Follower;
- use App\FollowRequest;
- use App\Notification;
- use App\Profile;
- use Cache;
- use Illuminate\Bus\Queueable;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Foundation\Bus\Dispatchable;
- use Illuminate\Queue\InteractsWithQueue;
- use Illuminate\Queue\SerializesModels;
- use Log;
- use Illuminate\Support\Facades\Redis;
- use App\Services\AccountService;
- use App\Services\FollowerService;
- use App\Services\NotificationService;
- use App\Jobs\HomeFeedPipeline\FeedUnfollowPipeline;
- class UnfollowPipeline implements ShouldQueue
- {
- use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
- protected $actor;
- protected $target;
- /**
- * Create a new job instance.
- *
- * @return void
- */
- public function __construct($actor, $target)
- {
- $this->actor = $actor;
- $this->target = $target;
- }
- /**
- * Execute the job.
- *
- * @return void
- */
- public function handle()
- {
- $actor = $this->actor;
- $target = $this->target;
- $actorProfile = Profile::find($actor);
- if(!$actorProfile) {
- return;
- }
- $targetProfile = Profile::find($target);
- if(!$targetProfile) {
- return;
- }
- FeedUnfollowPipeline::dispatch($actor, $target)->onQueue('follow');
- FollowerService::remove($actor, $target);
- $actorProfileSync = Cache::get(FollowerService::FOLLOWING_SYNC_KEY . $actor);
- if(!$actorProfileSync) {
- FollowServiceWarmCache::dispatch($actor)->onQueue('low');
- } else {
- if($actorProfile->following_count) {
- $actorProfile->decrement('following_count');
- } else {
- $count = Follower::whereProfileId($actor)->count();
- $actorProfile->following_count = $count;
- $actorProfile->save();
- }
- Cache::put(FollowerService::FOLLOWING_SYNC_KEY . $actor, 1, 604800);
- AccountService::del($actor);
- }
- $targetProfileSync = Cache::get(FollowerService::FOLLOWERS_SYNC_KEY . $target);
- if(!$targetProfileSync) {
- FollowServiceWarmCache::dispatch($target)->onQueue('low');
- } else {
- if($targetProfile->followers_count) {
- $targetProfile->decrement('followers_count');
- } else {
- $count = Follower::whereFollowingId($target)->count();
- $targetProfile->followers_count = $count;
- $targetProfile->save();
- }
- Cache::put(FollowerService::FOLLOWERS_SYNC_KEY . $target, 1, 604800);
- AccountService::del($target);
- }
- if($targetProfile->domain == null) {
- Notification::withTrashed()
- ->whereProfileId($target)
- ->whereAction('follow')
- ->whereActorId($actor)
- ->whereItemId($target)
- ->whereItemType('App\Profile')
- ->get()
- ->each(function($n) {
- NotificationService::del($n->profile_id, $n->id);
- $n->forceDelete();
- });
- }
- if($actorProfile->domain == null && config('instance.timeline.home.cached')) {
- Cache::forget('pf:timelines:home:' . $actor);
- }
- FollowRequest::whereFollowingId($target)
- ->whereFollowerId($actor)
- ->delete();
- return;
- }
- }
|