Skip to content

Commit

Permalink
Update StatusHashtagService, use more efficient cached count
Browse files Browse the repository at this point in the history
  • Loading branch information
dansup committed Mar 7, 2024
1 parent e68fe64 commit 592c841
Showing 1 changed file with 90 additions and 89 deletions.
179 changes: 90 additions & 89 deletions app/Services/StatusHashtagService.php
Expand Up @@ -2,96 +2,97 @@

namespace App\Services;

use Cache;
use Illuminate\Support\Facades\Redis;
use App\{Status, StatusHashtag};
use App\Transformer\Api\StatusHashtagTransformer;
use App\Hashtag;
use App\Status;
use App\StatusHashtag;
use App\Transformer\Api\HashtagTransformer;
use League\Fractal;
use League\Fractal\Serializer\ArraySerializer;
use League\Fractal\Pagination\IlluminatePaginatorAdapter;

class StatusHashtagService {

const CACHE_KEY = 'pf:services:status-hashtag:collection:';

public static function get($id, $page = 1, $stop = 9)
{
if($page > 20) {
return [];
}

$pid = request()->user() ? request()->user()->profile_id : false;
$filtered = $pid ? UserFilterService::filters($pid) : [];

return StatusHashtag::whereHashtagId($id)
->whereStatusVisibility('public')
->skip($stop)
->latest()
->take(9)
->pluck('status_id')
->map(function ($i, $k) use ($id) {
return self::getStatus($i, $id);
})
->filter(function ($i) use($filtered) {
return isset($i['status']) &&
!empty($i['status']) && !in_array($i['status']['account']['id'], $filtered) &&
isset($i['status']['media_attachments']) &&
!empty($i['status']['media_attachments']);
})
->values();
}

public static function coldGet($id, $start = 0, $stop = 2000)
{
$stop = $stop > 2000 ? 2000 : $stop;
$ids = StatusHashtag::whereHashtagId($id)
->whereStatusVisibility('public')
->whereHas('media')
->latest()
->skip($start)
->take($stop)
->pluck('status_id');
foreach($ids as $key) {
self::set($id, $key);
}
return $ids;
}

public static function set($key, $val)
{
return 1;
}

public static function del($key)
{
return 1;
}

public static function count($id)
{
$key = 'pf:services:status-hashtag:count:' . $id;
$ttl = now()->addMinutes(5);
return Cache::remember($key, $ttl, function() use($id) {
return StatusHashtag::whereHashtagId($id)->has('media')->count();
});
}

public static function getStatus($statusId, $hashtagId)
{
return ['status' => StatusService::get($statusId)];
}

public static function statusTags($statusId)
{
$status = Status::with('hashtags')->find($statusId);
if(!$status) {
return [];
}

$fractal = new Fractal\Manager();
$fractal->setSerializer(new ArraySerializer());
$resource = new Fractal\Resource\Collection($status->hashtags, new HashtagTransformer());
return $fractal->createData($resource)->toArray();
}

class StatusHashtagService
{
const CACHE_KEY = 'pf:services:status-hashtag:collection:';

public static function get($id, $page = 1, $stop = 9)
{
if ($page > 20) {
return [];
}

$pid = request()->user() ? request()->user()->profile_id : false;
$filtered = $pid ? UserFilterService::filters($pid) : [];

return StatusHashtag::whereHashtagId($id)
->whereStatusVisibility('public')
->skip($stop)
->latest()
->take(9)
->pluck('status_id')
->map(function ($i, $k) use ($id) {
return self::getStatus($i, $id);
})
->filter(function ($i) use ($filtered) {
return isset($i['status']) &&
! empty($i['status']) && ! in_array($i['status']['account']['id'], $filtered) &&
isset($i['status']['media_attachments']) &&
! empty($i['status']['media_attachments']);
})
->values();
}

public static function coldGet($id, $start = 0, $stop = 2000)
{
$stop = $stop > 2000 ? 2000 : $stop;
$ids = StatusHashtag::whereHashtagId($id)
->whereStatusVisibility('public')
->whereHas('media')
->latest()
->skip($start)
->take($stop)
->pluck('status_id');
foreach ($ids as $key) {
self::set($id, $key);
}

return $ids;
}

public static function set($key, $val)
{
return 1;
}

public static function del($key)
{
return 1;
}

public static function count($id)
{
$cc = Hashtag::find($id);
if (! $cc) {
return 0;
}

return $cc->cached_count ?? 0;
}

public static function getStatus($statusId, $hashtagId)
{
return ['status' => StatusService::get($statusId)];
}

public static function statusTags($statusId)
{
$status = Status::with('hashtags')->find($statusId);
if (! $status) {
return [];
}

$fractal = new Fractal\Manager();
$fractal->setSerializer(new ArraySerializer());
$resource = new Fractal\Resource\Collection($status->hashtags, new HashtagTransformer());

return $fractal->createData($resource)->toArray();
}
}

0 comments on commit 592c841

Please sign in to comment.