store->fetchByDomain($domain); } public function fetchById(string $identifier): ?TenantObject { return $this->store->fetch($identifier); } /** * List all tenants keyed by id * * @return array */ public function list(): array { return $this->store->list(); } public function deposit(TenantObject $tenant): ?TenantObject { $domains = $tenant->getDomains(); if ($domains === null || count($domains) === 0) { throw new \InvalidArgumentException('A tenant must have at least one domain.'); } return $this->store->deposit($tenant); } public function destroy(TenantObject $tenant): void { $this->store->destroy($tenant); } // ========================================================================= // Settings // ========================================================================= /** * Fetch all – or a filtered subset of – a tenant's settings. * * @param string $identifier Tenant identifier * @param string[] $keys Optional list of keys to return; empty = all * * @return array */ public function fetchSettings(string $identifier, array $keys = []): array { return $this->store->fetchSettings($identifier, $keys); } /** * Merge-update settings for a tenant. * * @param string $identifier Tenant identifier * @param array $settings Key-value pairs to persist */ public function storeSettings(string $identifier, array $settings): bool { return $this->store->storeSettings($identifier, $settings); } }