forked from mirror/pixelfed
Merge pull request #2562 from pixelfed/staging
Update DiscoverController, improve trending api performance
This commit is contained in:
commit
3d8019fa11
|
@ -154,6 +154,7 @@
|
||||||
- Updated StatusController, fix scope bug. ([7dc3739c](https://github.com/pixelfed/pixelfed/commit/7dc3739c))
|
- Updated StatusController, fix scope bug. ([7dc3739c](https://github.com/pixelfed/pixelfed/commit/7dc3739c))
|
||||||
- Updated AP helpers, fixed federation bug. ([a52564f3](https://github.com/pixelfed/pixelfed/commit/a52564f3))
|
- Updated AP helpers, fixed federation bug. ([a52564f3](https://github.com/pixelfed/pixelfed/commit/a52564f3))
|
||||||
- Updated Helpers, cache profiles. ([1f672ecf](https://github.com/pixelfed/pixelfed/commit/1f672ecf))
|
- Updated Helpers, cache profiles. ([1f672ecf](https://github.com/pixelfed/pixelfed/commit/1f672ecf))
|
||||||
|
- Updated DiscoverController, improve trending api performance. ([d8d3331f](https://github.com/pixelfed/pixelfed/commit/d8d3331f))
|
||||||
|
|
||||||
## [v0.10.9 (2020-04-17)](https://github.com/pixelfed/pixelfed/compare/v0.10.8...v0.10.9)
|
## [v0.10.9 (2020-04-17)](https://github.com/pixelfed/pixelfed/compare/v0.10.8...v0.10.9)
|
||||||
### Added
|
### Added
|
||||||
|
|
|
@ -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,41 @@ 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.1:range:' . $range;
|
$key = ':api:discover:trending:v2.8:range:' . $range;
|
||||||
$ttl = now()->addHours(2);
|
$ttl = now()->addMinutes(15);
|
||||||
$res = Cache::remember($key, $ttl, function() use($range) {
|
|
||||||
if($range == '-1') {
|
$ids = Cache::remember($key, $ttl, function() use($range) {
|
||||||
$res = Status::whereScope('public')
|
$days = $range == 1 ? 2 : 31;
|
||||||
->whereIn('type', ['photo', 'photo:album', 'video'])
|
$min_id = SnowflakeService::byDate(now()->subDays($days));
|
||||||
|
return Status::select(
|
||||||
|
'id',
|
||||||
|
'scope',
|
||||||
|
'type',
|
||||||
|
'is_nsfw',
|
||||||
|
'likes_count',
|
||||||
|
'created_at'
|
||||||
|
)
|
||||||
|
->where('id', '>', $min_id)
|
||||||
|
->whereNull('uri')
|
||||||
|
->whereScope('public')
|
||||||
|
->whereIn('type', [
|
||||||
|
'photo',
|
||||||
|
'photo:album',
|
||||||
|
'video'
|
||||||
|
])
|
||||||
->whereIsNsfw(false)
|
->whereIsNsfw(false)
|
||||||
->orderBy('likes_count','desc')
|
->orderBy('likes_count','desc')
|
||||||
->take(12)
|
->take(15)
|
||||||
->get();
|
->pluck('id');
|
||||||
} else {
|
|
||||||
$res = Status::whereScope('public')
|
|
||||||
->whereIn('type', ['photo', 'photo:album', 'video'])
|
|
||||||
->whereIsNsfw(false)
|
|
||||||
->orderBy('likes_count','desc')
|
|
||||||
->take(12)
|
|
||||||
->where('created_at', '>', now()->subDays($range))
|
|
||||||
->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)
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Services;
|
||||||
|
|
||||||
|
use Illuminate\Support\Carbon;
|
||||||
|
|
||||||
|
class SnowflakeService {
|
||||||
|
|
||||||
|
public static function byDate(Carbon $ts = null)
|
||||||
|
{
|
||||||
|
$ts = $ts ? now()->parse($ts)->timestamp : microtime(true);
|
||||||
|
return ((round($ts * 1000) - 1549756800000) << 22)
|
||||||
|
| (1 << 17)
|
||||||
|
| (1 << 12)
|
||||||
|
| 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue