diff --git a/src/lib/features/feature-toggle/createFeatureToggleService.ts b/src/lib/features/feature-toggle/createFeatureToggleService.ts index ef6921b827..318b9a9897 100644 --- a/src/lib/features/feature-toggle/createFeatureToggleService.ts +++ b/src/lib/features/feature-toggle/createFeatureToggleService.ts @@ -144,16 +144,18 @@ export const createFeatureToggleService = ( strategyStore, }, { getLogger, flagResolver, eventBus, resourceLimits }, - segmentService, - accessService, - eventService, - changeRequestAccessReadModel, - privateProjectChecker, - dependentFeaturesReadModel, - dependentFeaturesService, - featureLifecycleReadModel, - featureCollaboratorsReadModel, - featureLinksReadModel, + { + segmentService, + accessService, + eventService, + changeRequestAccessReadModel, + privateProjectChecker, + dependentFeaturesReadModel, + dependentFeaturesService, + featureLifecycleReadModel, + featureCollaboratorsReadModel, + featureLinksReadModel, + }, ); return featureToggleService; }; @@ -213,16 +215,18 @@ export const createFakeFeatureToggleService = (config: IUnleashConfig) => { eventBus: new EventEmitter(), resourceLimits, }, - segmentService, - accessService, - eventService, - changeRequestAccessReadModel, - fakePrivateProjectChecker, - dependentFeaturesReadModel, - dependentFeaturesService, - featureLifecycleReadModel, - featureCollaboratorsReadModel, - featureLinksReadModel, + { + segmentService, + accessService, + eventService, + changeRequestAccessReadModel, + privateProjectChecker: fakePrivateProjectChecker, + dependentFeaturesReadModel, + dependentFeaturesService, + featureLifecycleReadModel, + featureCollaboratorsReadModel, + featureLinksReadModel, + }, ); return { featureToggleService, diff --git a/src/lib/features/feature-toggle/feature-toggle-service.ts b/src/lib/features/feature-toggle/feature-toggle-service.ts index 82801218d8..af8b3958c9 100644 --- a/src/lib/features/feature-toggle/feature-toggle-service.ts +++ b/src/lib/features/feature-toggle/feature-toggle-service.ts @@ -149,6 +149,36 @@ const oneOf = (values: string[], match: string) => { 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 { private logger: Logger; @@ -204,36 +234,20 @@ class FeatureToggleService { featureEnvironmentStore, contextFieldStore, strategyStore, - }: Pick< - IUnleashStores, - | 'featureStrategiesStore' - | 'featureToggleStore' - | 'clientFeatureToggleStore' - | 'projectStore' - | 'featureTagStore' - | 'featureEnvironmentStore' - | 'contextFieldStore' - | 'strategyStore' - >, + }: Stores, + { getLogger, flagResolver, eventBus, resourceLimits }: Config, { - getLogger, - flagResolver, - eventBus, - resourceLimits, - }: Pick< - IUnleashConfig, - 'getLogger' | 'flagResolver' | 'eventBus' | 'resourceLimits' - >, - segmentService: ISegmentService, - accessService: AccessService, - eventService: EventService, - changeRequestAccessReadModel: IChangeRequestAccessReadModel, - privateProjectChecker: IPrivateProjectChecker, - dependentFeaturesReadModel: IDependentFeaturesReadModel, - dependentFeaturesService: DependentFeaturesService, - featureLifecycleReadModel: IFeatureLifecycleReadModel, - featureCollaboratorsReadModel: IFeatureCollaboratorsReadModel, - featureLinksReadModel: IFeatureLinksReadModel, + segmentService, + accessService, + eventService, + changeRequestAccessReadModel, + privateProjectChecker, + dependentFeaturesReadModel, + dependentFeaturesService, + featureLifecycleReadModel, + featureCollaboratorsReadModel, + featureLinksReadModel, + }: ServicesAndReadModels, ) { this.logger = getLogger('services/feature-toggle-service.ts'); this.featureStrategiesStore = featureStrategiesStore; diff --git a/src/lib/services/feature-service-potentially-stale.test.ts b/src/lib/services/feature-service-potentially-stale.test.ts index 7436f114ca..e151b002e9 100644 --- a/src/lib/services/feature-service-potentially-stale.test.ts +++ b/src/lib/services/feature-service-potentially-stale.test.ts @@ -1,22 +1,15 @@ import { FEATURE_POTENTIALLY_STALE_ON, type IBaseEvent, - type IFeatureCollaboratorsReadModel, type IUnleashConfig, type IUnleashStores, } from '../types'; import { createTestConfig } from '../../test/config/test-config'; -import FeatureToggleService from '../features/feature-toggle/feature-toggle-service'; -import type { AccessService } from './access-service'; -import type { IChangeRequestAccessReadModel } from '../features/change-request-access-service/change-request-access-read-model'; -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 FeatureToggleService, { + type ServicesAndReadModels, +} from '../features/feature-toggle/feature-toggle-service'; import EventService from '../features/events/event-service'; 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 () => { expect.assertions(2); @@ -64,16 +57,7 @@ test('Should only store events for potentially stale on', async () => { ...(config.experimental ?? {}), }, } as unknown as IUnleashConfig, - {} as ISegmentService, - {} as AccessService, - eventService, - {} as IChangeRequestAccessReadModel, - {} as IPrivateProjectChecker, - {} as IDependentFeaturesReadModel, - {} as DependentFeaturesService, - {} as IFeatureLifecycleReadModel, - {} as IFeatureCollaboratorsReadModel, - {} as IFeatureLinksReadModel, + { eventService } as ServicesAndReadModels, ); await featureToggleService.updatePotentiallyStaleFeatures(); diff --git a/src/lib/services/index.ts b/src/lib/services/index.ts index 4568fa395d..6f2c6e82c1 100644 --- a/src/lib/services/index.ts +++ b/src/lib/services/index.ts @@ -291,13 +291,11 @@ export const createServices = ( ? new FeatureCollaboratorsReadModel(db) : new FakeFeatureCollaboratorsReadModel(); - const featureLinkReadModel = db + const featureLinksReadModel = db ? new FeatureLinksReadModel(db, config.eventBus) : new FakeFeatureLinksReadModel(); - const featureToggleService = new FeatureToggleService( - stores, - config, + const featureToggleService = new FeatureToggleService(stores, config, { segmentService, accessService, eventService, @@ -307,8 +305,8 @@ export const createServices = ( dependentFeaturesService, featureLifecycleReadModel, featureCollaboratorsReadModel, - featureLinkReadModel, - ); + featureLinksReadModel, + }); const transactionalEnvironmentService = db ? withTransactional(createEnvironmentService(config), db) : withFakeTransactional(createFakeEnvironmentService(config));