Update DiscoverController, improve trending api performance

pull/2562/head
Daniel Supernault 5 years ago
parent c0076ab035
commit d8d3331f3f
No known key found for this signature in database
GPG Key ID: 0DEF1C662C9033F7

@ -22,6 +22,8 @@ use League\Fractal;
use League\Fractal\Serializer\ArraySerializer; use League\Fractal\Serializer\ArraySerializer;
use League\Fractal\Pagination\IlluminatePaginatorAdapter; use League\Fractal\Pagination\IlluminatePaginatorAdapter;
use App\Services\StatusHashtagService; use App\Services\StatusHashtagService;
use App\Services\SnowflakeService;
use App\Services\StatusService;
class DiscoverController extends Controller class DiscoverController extends Controller
{ {
@ -173,33 +175,40 @@ class DiscoverController extends Controller
'range' => 'nullable|string|in:daily,monthly' 'range' => 'nullable|string|in:daily,monthly'
]); ]);
$range = $request->filled('range') ? $range = $request->input('range') == 'monthly' ? 31 : 1;
$request->input('range') == 'alltime' ? '-1' :
($request->input('range') == 'daily' ? 1 : 31) : 1; $key = ':api:discover:trending:v2.8:range:' . $range;
$ttl = now()->addMinutes(15);
$key = ':api:discover:trending:v2.1:range:' . $range;
$ttl = now()->addHours(2); $ids = Cache::remember($key, $ttl, function() use($range) {
$res = Cache::remember($key, $ttl, function() use($range) { $days = $range == 1 ? 2 : 31;
if($range == '-1') { $min_id = SnowflakeService::byDate(now()->subDays($days));
$res = Status::whereScope('public') return Status::select(
->whereIn('type', ['photo', 'photo:album', 'video']) 'id',
->whereIsNsfw(false) 'scope',
->orderBy('likes_count','desc') 'type',
->take(12) 'is_nsfw',
->get(); 'likes_count',
} else { 'created_at'
$res = Status::whereScope('public') )
->whereIn('type', ['photo', 'photo:album', 'video']) ->where('id', '>', $min_id)
->whereScope('public')
->whereIn('type', [
'photo',
'photo:album',
'video'
])
->whereIsNsfw(false) ->whereIsNsfw(false)
->orderBy('likes_count','desc') ->orderBy('likes_count','desc')
->take(12) ->take(15)
->where('created_at', '>', now()->subDays($range)) ->pluck('id');
->get();
}
$resource = new Fractal\Resource\Collection($res, new StatusStatelessTransformer());
return $this->fractal->createData($resource)->toArray();
}); });
return response()->json($res, 200, [], JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES);
$res = $ids->map(function($s) {
return StatusService::get($s);
});
return response()->json($res);
} }
public function trendingHashtags(Request $request) public function trendingHashtags(Request $request)

Loading…
Cancel
Save