Selaa lähdekoodia

Improve DiscoverService

Daniel Supernault 3 vuotta sitten
vanhempi
commit
aee9b994e3

+ 1 - 1
app/Http/Controllers/Api/ApiV1Controller.php

@@ -2446,7 +2446,7 @@ class ApiV1Controller extends Controller
 		$pid = $request->user()->profile_id;
 		$filters = UserFilterService::filters($pid);
 		$forYou = DiscoverService::getForYou();
-		$posts = $forYou->random(50)->map(function($post) {
+		$posts = $forYou->take(50)->map(function($post) {
 			return StatusService::get($post);
 		})
 		->filter(function($post) use($filters) {

+ 1 - 1
app/Http/Controllers/InternalApiController.php

@@ -72,7 +72,7 @@ class InternalApiController extends Controller
 		$pid = $request->user()->profile_id;
 		$filters = UserFilterService::filters($pid);
 		$forYou = DiscoverService::getForYou();
-		$posts = $forYou->random(50)->map(function($post) {
+		$posts = $forYou->take(50)->map(function($post) {
 			return StatusService::get($post);
 		})
 		->filter(function($post) use($filters) {

+ 14 - 16
app/Services/DiscoverService.php

@@ -3,28 +3,26 @@
 namespace App\Services;
 
 use Illuminate\Support\Facades\Cache;
-use App\Status;
+use Illuminate\Support\Facades\DB;
 
 class DiscoverService
 {
 	public static function getDailyIdPool()
 	{
 		$min_id = SnowflakeService::byDate(now()->subMonths(3));
-		return Status::select(
-				'id',
-				'is_nsfw',
-				'profile_id',
-				'type',
-				'uri',
-			  )
-			  ->whereNull('uri')
-			  ->whereType('photo')
-			  ->whereIsNsfw(false)
-			  ->whereVisibility('public')
-			  ->where('id', '>', $min_id)
-			  ->inRandomOrder()
-			  ->take(300)
-			  ->pluck('id');
+		$sqld = config('database.default') == 'mysql';
+		return DB::table('statuses')
+			->whereNull('uri')
+			->whereType('photo')
+			->whereIsNsfw(false)
+			->whereVisibility('public')
+			->when($sqld, function($q, $sqld) {
+				return $q->groupBy('profile_id');
+			})
+			->where('id', '>', $min_id)
+			->inRandomOrder()
+			->take(300)
+			->pluck('id');
 	}
 
 	public static function getForYou()