public function getProjects($refresh = null)
{
$cacheKey = sprintf('%s:projects', self::$sessionId);
/** @var Project[] $projects */
$projects = [];
$cached = self::$cache->fetch($cacheKey);
if ($refresh === false && !$cached) {
return [];
} elseif ($refresh || !$cached) {
foreach ($this->getClient()->getProjects() as $project) {
$projects[$project->id] = $project;
}
$cachedProjects = [];
foreach ($projects as $id => $project) {
$cachedProjects[$id] = $project->getData();
$cachedProjects[$id]['_endpoint'] = $project->getUri(true);
}
self::$cache->save($cacheKey, $cachedProjects, $this->config->get('api.projects_ttl'));
} else {
$guzzleClient = $this->getClient()->getConnector()->getClient();
foreach ((array) $cached as $id => $data) {
$projects[$id] = new Project($data, $data['_endpoint'], $guzzleClient);
}
}
return $projects;
}