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:
parent
82dddb2eef
commit
9c05e56c4a
@ -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,
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
|
@ -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));
|
||||||
|
Loading…
Reference in New Issue
Block a user