orderBy('order') ->get() ->filter(function($item) use($id) { return StatusService::get($item->object_id) != null; }) ->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' => '/storage/no-preview.png', 'url' => $collection->url(), 'published_at' => $collection->published_at ]; }); if($collection) { $collection['thumb'] = self::getThumb($id); $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']; } }