diff --git a/app/Services/CollectionService.php b/app/Services/CollectionService.php new file mode 100644 index 000000000..33a3303ff --- /dev/null +++ b/app/Services/CollectionService.php @@ -0,0 +1,141 @@ +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']; + } +}