|
@@ -63,12 +63,12 @@ class DiscoverController extends Controller
|
|
|
|
|
|
public function getHashtags(Request $request)
|
|
|
{
|
|
|
- $auth = Auth::check();
|
|
|
- abort_if(!config('instance.discover.tags.is_public') && !$auth, 403);
|
|
|
+ $user = $request->user();
|
|
|
+ abort_if(!config('instance.discover.tags.is_public') && !$user, 403);
|
|
|
|
|
|
$this->validate($request, [
|
|
|
'hashtag' => 'required|string|min:1|max:124',
|
|
|
- 'page' => 'nullable|integer|min:1|max:' . ($auth ? 29 : 10)
|
|
|
+ 'page' => 'nullable|integer|min:1|max:' . ($user ? 29 : 10)
|
|
|
]);
|
|
|
|
|
|
$page = $request->input('page') ?? '1';
|
|
@@ -76,8 +76,8 @@ class DiscoverController extends Controller
|
|
|
$tag = $request->input('hashtag');
|
|
|
|
|
|
$hashtag = Hashtag::whereName($tag)->firstOrFail();
|
|
|
- if($page == 1) {
|
|
|
- $res['follows'] = HashtagFollow::whereUserId(Auth::id())
|
|
|
+ if($user && $page == 1) {
|
|
|
+ $res['follows'] = HashtagFollow::whereUserId($user->id)
|
|
|
->whereHashtagId($hashtag->id)
|
|
|
->exists();
|
|
|
}
|
|
@@ -85,7 +85,37 @@ class DiscoverController extends Controller
|
|
|
'name' => $hashtag->name,
|
|
|
'url' => $hashtag->url()
|
|
|
];
|
|
|
- $res['tags'] = StatusHashtagService::get($hashtag->id, $page, $end);
|
|
|
+ if($user) {
|
|
|
+ $tags = StatusHashtagService::get($hashtag->id, $page, $end);
|
|
|
+ $res['tags'] = collect($tags)
|
|
|
+ ->filter(function($tag) {
|
|
|
+ if(!StatusService::get($tag['status']['id'])) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ })
|
|
|
+ ->values();
|
|
|
+ } else {
|
|
|
+ $key = 'discover:tags:public_feed:' . $hashtag->id . ':page:' . $page;
|
|
|
+ $tags = Cache::remember($key, 900, function() use($hashtag, $page, $end) {
|
|
|
+ return collect(StatusHashtagService::get($hashtag->id, $page, $end))
|
|
|
+ ->filter(function($tag) {
|
|
|
+ if(!$tag['status']['local']) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ })
|
|
|
+ ->values();
|
|
|
+ });
|
|
|
+ $res['tags'] = collect($tags)
|
|
|
+ ->filter(function($tag) {
|
|
|
+ if(!StatusService::get($tag['status']['id'])) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ })
|
|
|
+ ->values();
|
|
|
+ }
|
|
|
return $res;
|
|
|
}
|
|
|
|