1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-06-27 01:19:00 +02:00

refactor: simplify feature toggle service deps (#9964)

This commit is contained in:
Mateusz Kwasniewski 2025-05-13 09:42:37 +02:00 committed by GitHub
parent 82dddb2eef
commit 9c05e56c4a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 75 additions and 75 deletions

View File

@ -144,16 +144,18 @@ export const createFeatureToggleService = (
strategyStore, strategyStore,
}, },
{ getLogger, flagResolver, eventBus, resourceLimits }, { getLogger, flagResolver, eventBus, resourceLimits },
segmentService, {
accessService, segmentService,
eventService, accessService,
changeRequestAccessReadModel, eventService,
privateProjectChecker, changeRequestAccessReadModel,
dependentFeaturesReadModel, privateProjectChecker,
dependentFeaturesService, dependentFeaturesReadModel,
featureLifecycleReadModel, dependentFeaturesService,
featureCollaboratorsReadModel, featureLifecycleReadModel,
featureLinksReadModel, featureCollaboratorsReadModel,
featureLinksReadModel,
},
); );
return featureToggleService; return featureToggleService;
}; };
@ -213,16 +215,18 @@ export const createFakeFeatureToggleService = (config: IUnleashConfig) => {
eventBus: new EventEmitter(), eventBus: new EventEmitter(),
resourceLimits, resourceLimits,
}, },
segmentService, {
accessService, segmentService,
eventService, accessService,
changeRequestAccessReadModel, eventService,
fakePrivateProjectChecker, changeRequestAccessReadModel,
dependentFeaturesReadModel, privateProjectChecker: fakePrivateProjectChecker,
dependentFeaturesService, dependentFeaturesReadModel,
featureLifecycleReadModel, dependentFeaturesService,
featureCollaboratorsReadModel, featureLifecycleReadModel,
featureLinksReadModel, featureCollaboratorsReadModel,
featureLinksReadModel,
},
); );
return { return {
featureToggleService, featureToggleService,

View File

@ -149,6 +149,36 @@ const oneOf = (values: string[], match: string) => {
return values.some((value) => value === match); return values.some((value) => value === match);
}; };
export type Stores = Pick<
IUnleashStores,
| 'featureStrategiesStore'
| 'featureToggleStore'
| 'clientFeatureToggleStore'
| 'projectStore'
| 'featureTagStore'
| 'featureEnvironmentStore'
| 'contextFieldStore'
| 'strategyStore'
>;
export type Config = Pick<
IUnleashConfig,
'getLogger' | 'flagResolver' | 'eventBus' | 'resourceLimits'
>;
export type ServicesAndReadModels = {
segmentService: ISegmentService;
accessService: AccessService;
eventService: EventService;
changeRequestAccessReadModel: IChangeRequestAccessReadModel;
privateProjectChecker: IPrivateProjectChecker;
dependentFeaturesReadModel: IDependentFeaturesReadModel;
dependentFeaturesService: DependentFeaturesService;
featureLifecycleReadModel: IFeatureLifecycleReadModel;
featureCollaboratorsReadModel: IFeatureCollaboratorsReadModel;
featureLinksReadModel: IFeatureLinksReadModel;
};
class FeatureToggleService { class FeatureToggleService {
private logger: Logger; private logger: Logger;
@ -204,36 +234,20 @@ class FeatureToggleService {
featureEnvironmentStore, featureEnvironmentStore,
contextFieldStore, contextFieldStore,
strategyStore, strategyStore,
}: Pick< }: Stores,
IUnleashStores, { getLogger, flagResolver, eventBus, resourceLimits }: Config,
| 'featureStrategiesStore'
| 'featureToggleStore'
| 'clientFeatureToggleStore'
| 'projectStore'
| 'featureTagStore'
| 'featureEnvironmentStore'
| 'contextFieldStore'
| 'strategyStore'
>,
{ {
getLogger, segmentService,
flagResolver, accessService,
eventBus, eventService,
resourceLimits, changeRequestAccessReadModel,
}: Pick< privateProjectChecker,
IUnleashConfig, dependentFeaturesReadModel,
'getLogger' | 'flagResolver' | 'eventBus' | 'resourceLimits' dependentFeaturesService,
>, featureLifecycleReadModel,
segmentService: ISegmentService, featureCollaboratorsReadModel,
accessService: AccessService, featureLinksReadModel,
eventService: EventService, }: ServicesAndReadModels,
changeRequestAccessReadModel: IChangeRequestAccessReadModel,
privateProjectChecker: IPrivateProjectChecker,
dependentFeaturesReadModel: IDependentFeaturesReadModel,
dependentFeaturesService: DependentFeaturesService,
featureLifecycleReadModel: IFeatureLifecycleReadModel,
featureCollaboratorsReadModel: IFeatureCollaboratorsReadModel,
featureLinksReadModel: IFeatureLinksReadModel,
) { ) {
this.logger = getLogger('services/feature-toggle-service.ts'); this.logger = getLogger('services/feature-toggle-service.ts');
this.featureStrategiesStore = featureStrategiesStore; this.featureStrategiesStore = featureStrategiesStore;

View File

@ -1,22 +1,15 @@
import { import {
FEATURE_POTENTIALLY_STALE_ON, FEATURE_POTENTIALLY_STALE_ON,
type IBaseEvent, type IBaseEvent,
type IFeatureCollaboratorsReadModel,
type IUnleashConfig, type IUnleashConfig,
type IUnleashStores, type IUnleashStores,
} from '../types'; } from '../types';
import { createTestConfig } from '../../test/config/test-config'; import { createTestConfig } from '../../test/config/test-config';
import FeatureToggleService from '../features/feature-toggle/feature-toggle-service'; import FeatureToggleService, {
import type { AccessService } from './access-service'; type ServicesAndReadModels,
import type { IChangeRequestAccessReadModel } from '../features/change-request-access-service/change-request-access-read-model'; } from '../features/feature-toggle/feature-toggle-service';
import type { ISegmentService } from '../features/segment/segment-service-interface';
import type { IPrivateProjectChecker } from '../features/private-project/privateProjectCheckerType';
import type { IDependentFeaturesReadModel } from '../features/dependent-features/dependent-features-read-model-type';
import EventService from '../features/events/event-service'; import EventService from '../features/events/event-service';
import FakeFeatureTagStore from '../../test/fixtures/fake-feature-tag-store'; import FakeFeatureTagStore from '../../test/fixtures/fake-feature-tag-store';
import type { DependentFeaturesService } from '../features/dependent-features/dependent-features-service';
import type { IFeatureLifecycleReadModel } from '../features/feature-lifecycle/feature-lifecycle-read-model-type';
import type { IFeatureLinksReadModel } from '../features/feature-links/feature-links-read-model-type';
test('Should only store events for potentially stale on', async () => { test('Should only store events for potentially stale on', async () => {
expect.assertions(2); expect.assertions(2);
@ -64,16 +57,7 @@ test('Should only store events for potentially stale on', async () => {
...(config.experimental ?? {}), ...(config.experimental ?? {}),
}, },
} as unknown as IUnleashConfig, } as unknown as IUnleashConfig,
{} as ISegmentService, { eventService } as ServicesAndReadModels,
{} as AccessService,
eventService,
{} as IChangeRequestAccessReadModel,
{} as IPrivateProjectChecker,
{} as IDependentFeaturesReadModel,
{} as DependentFeaturesService,
{} as IFeatureLifecycleReadModel,
{} as IFeatureCollaboratorsReadModel,
{} as IFeatureLinksReadModel,
); );
await featureToggleService.updatePotentiallyStaleFeatures(); await featureToggleService.updatePotentiallyStaleFeatures();

View File

@ -291,13 +291,11 @@ export const createServices = (
? new FeatureCollaboratorsReadModel(db) ? new FeatureCollaboratorsReadModel(db)
: new FakeFeatureCollaboratorsReadModel(); : new FakeFeatureCollaboratorsReadModel();
const featureLinkReadModel = db const featureLinksReadModel = db
? new FeatureLinksReadModel(db, config.eventBus) ? new FeatureLinksReadModel(db, config.eventBus)
: new FakeFeatureLinksReadModel(); : new FakeFeatureLinksReadModel();
const featureToggleService = new FeatureToggleService( const featureToggleService = new FeatureToggleService(stores, config, {
stores,
config,
segmentService, segmentService,
accessService, accessService,
eventService, eventService,
@ -307,8 +305,8 @@ export const createServices = (
dependentFeaturesService, dependentFeaturesService,
featureLifecycleReadModel, featureLifecycleReadModel,
featureCollaboratorsReadModel, featureCollaboratorsReadModel,
featureLinkReadModel, featureLinksReadModel,
); });
const transactionalEnvironmentService = db const transactionalEnvironmentService = db
? withTransactional(createEnvironmentService(config), db) ? withTransactional(createEnvironmentService(config), db)
: withFakeTransactional(createFakeEnvironmentService(config)); : withFakeTransactional(createFakeEnvironmentService(config));