Limit NotificationService to 400 items

This commit is contained in:
Daniel Supernault 2022-08-17 23:08:40 -06:00
parent 284d6fedaf
commit f6ed560e78
No known key found for this signature in database
GPG key ID: 0DEF1C662C9033F7
2 changed files with 15 additions and 2 deletions

View file

@ -2449,7 +2449,7 @@ class ApiV1Controller extends Controller
'media_ids' => 'sometimes|array|max:' . config_cache('pixelfed.max_album_length'), 'media_ids' => 'sometimes|array|max:' . config_cache('pixelfed.max_album_length'),
'sensitive' => 'nullable', 'sensitive' => 'nullable',
'visibility' => 'string|in:private,unlisted,public', 'visibility' => 'string|in:private,unlisted,public',
'spoiler_text' => 'sometimes|string|max:140', 'spoiler_text' => 'sometimes|max:140',
]); ]);
if(config('costar.enabled') == true) { if(config('costar.enabled') == true) {

View file

@ -194,6 +194,9 @@ class NotificationService {
public static function set($id, $val) public static function set($id, $val)
{ {
if(self::count($id) > 400) {
Redis::zpopmin(self::CACHE_KEY . $id);
}
return Redis::zadd(self::CACHE_KEY . $id, $val, $val); return Redis::zadd(self::CACHE_KEY . $id, $val, $val);
} }
@ -220,7 +223,7 @@ class NotificationService {
public static function getNotification($id) public static function getNotification($id)
{ {
return Cache::remember('service:notification:'.$id, 86400, function() use($id) { $notification = Cache::remember('service:notification:'.$id, 86400, function() use($id) {
$n = Notification::with('item')->find($id); $n = Notification::with('item')->find($id);
if(!$n) { if(!$n) {
@ -238,6 +241,16 @@ class NotificationService {
$resource = new Fractal\Resource\Item($n, new NotificationTransformer()); $resource = new Fractal\Resource\Item($n, new NotificationTransformer());
return $fractal->createData($resource)->toArray(); return $fractal->createData($resource)->toArray();
}); });
if(!$notification) {
return;
}
if(isset($notification['account'])) {
$notification['account'] = AccountService::get($notification['account']['id'], true);
}
return $notification;
} }
public static function setNotification(Notification $notification) public static function setNotification(Notification $notification)