Pārlūkot izejas kodu

Update FeedFollowPipeline, use more efficient query

Daniel Supernault 1 gadu atpakaļ
vecāks
revīzija
43443503a1

+ 5 - 1
app/Jobs/HomeFeedPipeline/FeedFollowPipeline.php

@@ -12,6 +12,7 @@ use Illuminate\Queue\Middleware\WithoutOverlapping;
 use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;
 use Illuminate\Contracts\Queue\ShouldBeUniqueUntilProcessing;
 use App\Services\AccountService;
 use App\Services\AccountService;
 use App\Services\HomeTimelineService;
 use App\Services\HomeTimelineService;
+use App\Services\SnowflakeService;
 use App\Status;
 use App\Status;
 
 
 class FeedFollowPipeline implements ShouldQueue, ShouldBeUniqueUntilProcessing
 class FeedFollowPipeline implements ShouldQueue, ShouldBeUniqueUntilProcessing
@@ -68,7 +69,10 @@ class FeedFollowPipeline implements ShouldQueue, ShouldBeUniqueUntilProcessing
         $actorId = $this->actorId;
         $actorId = $this->actorId;
         $followingId = $this->followingId;
         $followingId = $this->followingId;
 
 
-        $ids = Status::where('profile_id', $followingId)
+        $minId = SnowflakeService::byDate(now()->subMonths(6));
+
+        $ids = Status::where('id', '>', $minId)
+            ->where('profile_id', $followingId)
             ->whereNull(['in_reply_to_id', 'reblog_of_id'])
             ->whereNull(['in_reply_to_id', 'reblog_of_id'])
             ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album'])
             ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album'])
             ->whereIn('visibility',['public', 'unlisted', 'private'])
             ->whereIn('visibility',['public', 'unlisted', 'private'])

+ 4 - 1
app/Services/HomeTimelineService.php

@@ -73,7 +73,10 @@ class HomeTimelineService
                 return $following->push($id)->toArray();
                 return $following->push($id)->toArray();
             });
             });
 
 
-            $ids = Status::whereIn('profile_id', $following)
+            $minId = SnowflakeService::byDate(now()->subMonths(6));
+
+            $ids = Status::where('id', '>', $minId)
+                ->whereIn('profile_id', $following)
                 ->whereNull(['in_reply_to_id', 'reblog_of_id'])
                 ->whereNull(['in_reply_to_id', 'reblog_of_id'])
                 ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album'])
                 ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album'])
                 ->whereIn('visibility',['public', 'unlisted', 'private'])
                 ->whereIn('visibility',['public', 'unlisted', 'private'])