1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-10-04 11:17:02 +02:00
unleash.unleash/src/lib/features/client-feature-toggles/client-feature-toggle-service.ts
Jaanus Sellin 3696420c51
chore: rebrand cache to delta (#8986)
The cache is too generic, we will be using delta from now on.
2024-12-16 12:51:03 +02:00

91 lines
2.6 KiB
TypeScript

import type {
IFeatureToggleClientStore,
IFeatureToggleQuery,
ISegmentReadModel,
IUnleashConfig,
IUnleashStores,
} from '../../types';
import type { Logger } from '../../logger';
import type { FeatureConfigurationClient } from '../feature-toggle/types/feature-toggle-strategies-store-type';
import type {
RevisionDeltaEntry,
ClientFeatureToggleDelta,
} from './delta/client-feature-toggle-delta';
export class ClientFeatureToggleService {
private logger: Logger;
private clientFeatureToggleStore: IFeatureToggleClientStore;
private segmentReadModel: ISegmentReadModel;
private clientFeatureToggleDelta: ClientFeatureToggleDelta | null = null;
constructor(
{
clientFeatureToggleStore,
}: Pick<IUnleashStores, 'clientFeatureToggleStore'>,
segmentReadModel: ISegmentReadModel,
clientFeatureToggleCache: ClientFeatureToggleDelta | null,
{ getLogger }: Pick<IUnleashConfig, 'getLogger' | 'flagResolver'>,
) {
this.logger = getLogger('services/client-feature-toggle-service.ts');
this.segmentReadModel = segmentReadModel;
this.clientFeatureToggleDelta = clientFeatureToggleCache;
this.clientFeatureToggleStore = clientFeatureToggleStore;
}
async getActiveSegmentsForClient() {
return this.segmentReadModel.getActiveForClient();
}
async getClientDelta(
revisionId: number | undefined,
query: IFeatureToggleQuery,
): Promise<RevisionDeltaEntry | undefined> {
if (this.clientFeatureToggleDelta !== null) {
return this.clientFeatureToggleDelta.getDelta(revisionId, query);
} else {
throw new Error(
'Calling the partial updates but the cache is not initialized',
);
}
}
async getClientFeatures(
query?: IFeatureToggleQuery,
): Promise<FeatureConfigurationClient[]> {
const result = await this.clientFeatureToggleStore.getClient(
query || {},
);
return result.map(
({
name,
type,
enabled,
project,
stale,
strategies,
variants,
description,
impressionData,
dependencies,
}) => ({
name,
type,
enabled,
project,
stale,
strategies,
variants,
description,
impressionData,
dependencies,
}),
);
}
}