Merge pull request #2556 from pixelfed/staging

Update Controllers, add last_active_at logic
This commit is contained in:
daniel 2021-01-11 19:06:41 -07:00 committed by GitHub
commit 38a01032a2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 49 additions and 9 deletions

View file

@ -1320,6 +1320,15 @@ class ApiV1Controller extends Controller
$min = $request->input('min_id'); $min = $request->input('min_id');
$max = $request->input('max_id'); $max = $request->input('max_id');
$limit = $request->input('limit') ?? 3; $limit = $request->input('limit') ?? 3;
$user = $request->user();
$key = 'user:last_active_at:id:'.$user->id;
$ttl = now()->addMinutes(5);
Cache::remember($key, $ttl, function() use($user) {
$user->last_active_at = now();
$user->save();
return;
});
$pid = $request->user()->profile_id; $pid = $request->user()->profile_id;
@ -1424,6 +1433,15 @@ class ApiV1Controller extends Controller
$min = $request->input('min_id'); $min = $request->input('min_id');
$max = $request->input('max_id'); $max = $request->input('max_id');
$limit = $request->input('limit') ?? 3; $limit = $request->input('limit') ?? 3;
$user = $request->user();
$key = 'user:last_active_at:id:'.$user->id;
$ttl = now()->addMinutes(5);
Cache::remember($key, $ttl, function() use($user) {
$user->last_active_at = now();
$user->save();
return;
});
if($min || $max) { if($min || $max) {
$dir = $min ? '>' : '<'; $dir = $min ? '>' : '<';
@ -1452,6 +1470,7 @@ class ApiV1Controller extends Controller
->with('profile', 'hashtags', 'mentions') ->with('profile', 'hashtags', 'mentions')
->where('id', $dir, $id) ->where('id', $dir, $id)
->whereScope('public') ->whereScope('public')
->where('created_at', '>', now()->subDays(14))
->latest() ->latest()
->limit($limit) ->limit($limit)
->get(); ->get();
@ -1479,6 +1498,7 @@ class ApiV1Controller extends Controller
->whereIn('type', ['photo', 'photo:album', 'video', 'video:album']) ->whereIn('type', ['photo', 'photo:album', 'video', 'video:album'])
->with('profile', 'hashtags', 'mentions') ->with('profile', 'hashtags', 'mentions')
->whereScope('public') ->whereScope('public')
->where('created_at', '>', now()->subDays(14))
->latest() ->latest()
->simplePaginate($limit); ->simplePaginate($limit);
} }

View file

@ -170,26 +170,26 @@ class DiscoverController extends Controller
public function trendingApi(Request $request) public function trendingApi(Request $request)
{ {
$this->validate($request, [ $this->validate($request, [
'range' => 'nullable|string|in:daily,monthly,alltime' 'range' => 'nullable|string|in:daily,monthly'
]); ]);
$range = $request->filled('range') ? $range = $request->filled('range') ?
$request->input('range') == 'alltime' ? '-1' : $request->input('range') == 'alltime' ? '-1' :
($request->input('range') == 'daily' ? 1 : 31) : 1; ($request->input('range') == 'daily' ? 1 : 31) : 1;
$key = ':api:discover:trending:v2:range:' . $range; $key = ':api:discover:trending:v2.1:range:' . $range;
$ttl = now()->addHours(2); $ttl = now()->addHours(2);
$res = Cache::remember($key, $ttl, function() use($range) { $res = Cache::remember($key, $ttl, function() use($range) {
if($range == '-1') { if($range == '-1') {
$res = Status::whereScope('public') $res = Status::whereScope('public')
->whereType('photo') ->whereIn('type', ['photo', 'photo:album', 'video'])
->whereIsNsfw(false) ->whereIsNsfw(false)
->orderBy('likes_count','desc') ->orderBy('likes_count','desc')
->take(12) ->take(12)
->get(); ->get();
} else { } else {
$res = Status::whereScope('public') $res = Status::whereScope('public')
->whereType('photo') ->whereIn('type', ['photo', 'photo:album', 'video'])
->whereIsNsfw(false) ->whereIsNsfw(false)
->orderBy('likes_count','desc') ->orderBy('likes_count','desc')
->take(12) ->take(12)

View file

@ -272,8 +272,17 @@ class PublicApiController extends Controller
$min = $request->input('min_id'); $min = $request->input('min_id');
$max = $request->input('max_id'); $max = $request->input('max_id');
$limit = $request->input('limit') ?? 3; $limit = $request->input('limit') ?? 3;
$user = $request->user();
$filtered = UserFilter::whereUserId(Auth::user()->profile_id) $key = 'user:last_active_at:id:'.$user->id;
$ttl = now()->addMinutes(5);
Cache::remember($key, $ttl, function() use($user) {
$user->last_active_at = now();
$user->save();
return;
});
$filtered = UserFilter::whereUserId($user->profile_id)
->whereFilterableType('App\Profile') ->whereFilterableType('App\Profile')
->whereIn('filter_type', ['mute', 'block']) ->whereIn('filter_type', ['mute', 'block'])
->pluck('filterable_id')->toArray(); ->pluck('filterable_id')->toArray();
@ -301,10 +310,11 @@ class PublicApiController extends Controller
'created_at', 'created_at',
'updated_at' 'updated_at'
)->where('id', $dir, $id) )->where('id', $dir, $id)
->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) ->whereIn('type', ['text', 'photo', 'photo:album', 'video', 'video:album', 'photo:video:album'])
->whereNotIn('profile_id', $filtered) ->whereNotIn('profile_id', $filtered)
->whereLocal(true) ->whereLocal(true)
->whereScope('public') ->whereScope('public')
->where('created_at', '>', now()->subMonths(3))
->orderBy('created_at', 'desc') ->orderBy('created_at', 'desc')
->limit($limit) ->limit($limit)
->get(); ->get();
@ -328,11 +338,12 @@ class PublicApiController extends Controller
'likes_count', 'likes_count',
'reblogs_count', 'reblogs_count',
'updated_at' 'updated_at'
)->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) )->whereIn('type', ['text', 'photo', 'photo:album', 'video', 'video:album', 'photo:video:album'])
->whereNotIn('profile_id', $filtered) ->whereNotIn('profile_id', $filtered)
->with('profile', 'hashtags', 'mentions') ->with('profile', 'hashtags', 'mentions')
->whereLocal(true) ->whereLocal(true)
->whereScope('public') ->whereScope('public')
->where('created_at', '>', now()->subMonths(3))
->orderBy('created_at', 'desc') ->orderBy('created_at', 'desc')
->simplePaginate($limit); ->simplePaginate($limit);
} }
@ -360,6 +371,15 @@ class PublicApiController extends Controller
$min = $request->input('min_id'); $min = $request->input('min_id');
$max = $request->input('max_id'); $max = $request->input('max_id');
$limit = $request->input('limit') ?? 3; $limit = $request->input('limit') ?? 3;
$user = $request->user();
$key = 'user:last_active_at:id:'.$user->id;
$ttl = now()->addMinutes(5);
Cache::remember($key, $ttl, function() use($user) {
$user->last_active_at = now();
$user->save();
return;
});
// TODO: Use redis for timelines // TODO: Use redis for timelines
// $timeline = Timeline::build()->local(); // $timeline = Timeline::build()->local();
@ -409,7 +429,7 @@ class PublicApiController extends Controller
'reblogs_count', 'reblogs_count',
'created_at', 'created_at',
'updated_at' 'updated_at'
)->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) )->whereIn('type', ['text','photo', 'photo:album', 'video', 'video:album', 'photo:video:album'])
->with('profile', 'hashtags', 'mentions') ->with('profile', 'hashtags', 'mentions')
->where('id', $dir, $id) ->where('id', $dir, $id)
->whereIn('profile_id', $following) ->whereIn('profile_id', $following)
@ -438,7 +458,7 @@ class PublicApiController extends Controller
'reblogs_count', 'reblogs_count',
'created_at', 'created_at',
'updated_at' 'updated_at'
)->whereIn('type', ['photo', 'photo:album', 'video', 'video:album', 'photo:video:album']) )->whereIn('type', ['text','photo', 'photo:album', 'video', 'video:album', 'photo:video:album'])
->with('profile', 'hashtags', 'mentions') ->with('profile', 'hashtags', 'mentions')
->whereIn('profile_id', $following) ->whereIn('profile_id', $following)
->whereNotIn('profile_id', $filtered) ->whereNotIn('profile_id', $filtered)