123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- <?php
- namespace App\Services;
- use App\Collection;
- use App\CollectionItem;
- use Illuminate\Support\Facades\Cache;
- use Illuminate\Support\Facades\Redis;
- class CollectionService
- {
- const CACHE_KEY = 'pf:services:collections:';
- public static function getItems($id, $start = 0, $stop = 10)
- {
- if(self::count($id)) {
- return Redis::zrangebyscore(self::CACHE_KEY . 'items:' . $id, $start, $stop);
- }
- return self::coldBootItems($id);
- }
- public static function addItem($id, $sid, $score)
- {
- Redis::zadd(self::CACHE_KEY . 'items:' . $id, $score, $sid);
- }
- public static function removeItem($id, $sid)
- {
- Redis::zrem(self::CACHE_KEY . 'items:' . $id, $sid);
- }
- public static function clearItems($id)
- {
- Redis::del(self::CACHE_KEY . 'items:' . $id);
- }
- public static function coldBootItems($id)
- {
- return Cache::remember(self::CACHE_KEY . 'items:' . $id, 86400, function() use($id) {
- return CollectionItem::whereCollectionId($id)
- ->orderBy('order')
- ->get()
- ->each(function($item) use ($id) {
- self::addItem($id, $item->object_id, $item->order);
- })
- ->map(function($item) {
- return (string) $item->object_id;
- })
- ->values()
- ->toArray();
- });
- }
- public static function count($id)
- {
- $count = Redis::zcard(self::CACHE_KEY . 'items:' . $id);
- if(!$count) {
- self::coldBootItems($id);
- $count = Redis::zcard(self::CACHE_KEY . 'items:' . $id);
- }
- return $count;
- }
- public static function getCollection($id)
- {
- $collection = Cache::remember(self::CACHE_KEY . 'get:' . $id, 86400, function() use($id) {
- $collection = Collection::find($id);
- if(!$collection) {
- return false;
- }
- $account = AccountService::get($collection->profile_id);
- if(!$account) {
- return false;
- }
- return [
- 'id' => (string) $collection->id,
- 'pid' => (string) $collection->profile_id,
- 'username' => $account['username'],
- 'visibility' => $collection->visibility,
- 'title' => $collection->title,
- 'description' => $collection->description,
- 'thumb' => self::getThumb($id),
- 'url' => $collection->url(),
- 'published_at' => $collection->published_at
- ];
- });
- if($collection) {
- $collection['post_count'] = self::count($id);
- }
- return $collection;
- }
- public static function setCollection($id, $collection)
- {
- $account = AccountService::get($collection->profile_id);
- if(!$account) {
- return false;
- }
- $res = [
- 'id' => (string) $collection->id,
- 'pid' => (string) $collection->profile_id,
- 'username' => $account['username'],
- 'visibility' => $collection->visibility,
- 'title' => $collection->title,
- 'description' => $collection->description,
- 'thumb' => self::getThumb($id),
- 'url' => $collection->url(),
- 'published_at' => $collection->published_at
- ];
- Cache::put(self::CACHE_KEY . 'get:' . $id, $res, 86400);
- $res['post_count'] = self::count($id);
- return $res;
- }
- public static function deleteCollection($id)
- {
- Redis::del(self::CACHE_KEY . 'items:' . $id);
- Cache::forget(self::CACHE_KEY . 'get:' . $id);
- }
- public static function getThumb($id)
- {
- $item = self::getItems($id, 0, 1);
- if(!$item || empty($item)) {
- return '/storage/no-preview.png';
- }
- $status = StatusService::get($item[0]);
- if(!$status) {
- return '/storage/no-preview.png';
- }
- if(!isset($status['media_attachments']) || empty($status['media_attachments'])) {
- return '/storage/no-preview.png';
- }
- return $status['media_attachments'][0]['url'];
- }
- }
|