resolveAggregate( tenant: $tenant, resolver: fn (): TenantGovernanceAggregate => BaselineCompareStats::forTenant($tenant) ->toTenantGovernanceAggregate($tenant), fresh: $fresh, ); } public function fromStats(?Tenant $tenant, BaselineCompareStats $stats, bool $fresh = false): ?TenantGovernanceAggregate { if (! $tenant instanceof Tenant) { return null; } return $this->resolveAggregate( tenant: $tenant, resolver: fn (): TenantGovernanceAggregate => $stats->toTenantGovernanceAggregate($tenant), fresh: $fresh, ); } private function resolveAggregate(Tenant $tenant, callable $resolver, bool $fresh = false): TenantGovernanceAggregate { $key = DerivedStateKey::fromModel( DerivedStateFamily::TenantGovernanceAggregate, $tenant, self::VARIANT_TENANT_GOVERNANCE_SUMMARY, ); $value = $fresh ? $this->derivedStateStore->resolveFresh( $key, $resolver, DerivedStateFamily::TenantGovernanceAggregate->defaultFreshnessPolicy(), DerivedStateFamily::TenantGovernanceAggregate->allowsNegativeResultCache(), ) : $this->derivedStateStore->resolve( $key, $resolver, DerivedStateFamily::TenantGovernanceAggregate->defaultFreshnessPolicy(), DerivedStateFamily::TenantGovernanceAggregate->allowsNegativeResultCache(), ); return $value; } }