1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-04-29 01:15:48 +02:00

chore: centralize events service creation (#5910)

## About the changes
EventsService is a dependency in most of our services. This creates
helper methods to create them easily and replace a few places where
we're creating them manually
This commit is contained in:
Gastón Fournier 2024-01-16 13:11:28 +01:00 committed by GitHub
parent f22efdfddb
commit 2ddc56927e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 55 additions and 107 deletions

View File

@ -1,5 +1,4 @@
import { Db, IUnleashConfig } from 'lib/server-impl';
import EventStore from '../../db/event-store';
import GroupStore from '../../db/group-store';
import { AccountStore } from '../../db/account-store';
import RoleStore from '../../db/role-store';
@ -12,26 +11,21 @@ import { FakeAccountStore } from '../../../test/fixtures/fake-account-store';
import FakeRoleStore from '../../../test/fixtures/fake-role-store';
import FakeEnvironmentStore from '../project-environments/fake-environment-store';
import FakeAccessStore from '../../../test/fixtures/fake-access-store';
import FeatureTagStore from '../../db/feature-tag-store';
import FakeFeatureTagStore from '../../../test/fixtures/fake-feature-tag-store';
import { IEventStore } from '../../types';
import { createEventsService } from '../events/createEventsService';
export const createAccessService = (
db: Db,
config: IUnleashConfig,
): AccessService => {
const { eventBus, getLogger, flagResolver } = config;
const eventStore = new EventStore(db, getLogger);
const groupStore = new GroupStore(db);
const accountStore = new AccountStore(db, getLogger);
const roleStore = new RoleStore(db, eventBus, getLogger);
const environmentStore = new EnvironmentStore(db, eventBus, getLogger);
const accessStore = new AccessStore(db, eventBus, getLogger);
const featureTagStore = new FeatureTagStore(db, eventBus, getLogger);
const eventService = new EventService(
{ eventStore, featureTagStore },
config,
);
const eventService = createEventsService(db, config);
const groupService = new GroupService(
{ groupStore, accountStore },
{ getLogger },

View File

@ -4,32 +4,22 @@ import { DependentFeaturesStore } from './dependent-features-store';
import { DependentFeaturesReadModel } from './dependent-features-read-model';
import { FakeDependentFeaturesStore } from './fake-dependent-features-store';
import { FakeDependentFeaturesReadModel } from './fake-dependent-features-read-model';
import EventStore from '../../db/event-store';
import { IUnleashConfig } from '../../types';
import { EventService } from '../../services';
import FeatureTagStore from '../../db/feature-tag-store';
import FakeEventStore from '../../../test/fixtures/fake-event-store';
import FakeFeatureTagStore from '../../../test/fixtures/fake-feature-tag-store';
import {
createChangeRequestAccessReadModel,
createFakeChangeRequestAccessService,
} from '../change-request-access-service/createChangeRequestAccessReadModel';
import { FeaturesReadModel } from '../feature-toggle/features-read-model';
import { FakeFeaturesReadModel } from '../feature-toggle/fakes/fake-features-read-model';
import {
createEventsService,
createFakeEventsService,
} from '../events/createEventsService';
export const createDependentFeaturesService =
(config: IUnleashConfig) =>
(db: Db): DependentFeaturesService => {
const { getLogger, eventBus } = config;
const eventStore = new EventStore(db, getLogger);
const featureTagStore = new FeatureTagStore(db, eventBus, getLogger);
const eventService = new EventService(
{
eventStore,
featureTagStore,
},
config,
);
const eventService = createEventsService(db, config);
const dependentFeaturesStore = new DependentFeaturesStore(db);
const dependentFeaturesReadModel = new DependentFeaturesReadModel(db);
const changeRequestAccessReadModel = createChangeRequestAccessReadModel(
@ -49,15 +39,7 @@ export const createDependentFeaturesService =
export const createFakeDependentFeaturesService = (
config: IUnleashConfig,
): DependentFeaturesService => {
const eventStore = new FakeEventStore();
const featureTagStore = new FakeFeatureTagStore();
const eventService = new EventService(
{
eventStore,
featureTagStore,
},
config,
);
const eventService = createFakeEventsService(config);
const dependentFeaturesStore = new FakeDependentFeaturesStore();
const dependentFeaturesReadModel = new FakeDependentFeaturesReadModel();
const changeRequestAccessReadModel = createFakeChangeRequestAccessService();

View File

@ -0,0 +1,27 @@
import FakeEventStore from '../../../test/fixtures/fake-event-store';
import FakeFeatureTagStore from '../../../test/fixtures/fake-feature-tag-store';
import { Db } from '../../db/db';
import EventStore from '../../db/event-store';
import FeatureTagStore from '../../db/feature-tag-store';
import { EventService } from '../../services';
import { IUnleashConfig } from '../../types';
export const createEventsService: (
db: Db,
config: IUnleashConfig,
) => EventService = (db, config) => {
const eventStore = new EventStore(db, config.getLogger);
const featureTagStore = new FeatureTagStore(
db,
config.eventBus,
config.getLogger,
);
return new EventService({ eventStore, featureTagStore }, config);
};
export const createFakeEventsService: (config: IUnleashConfig) => EventService =
(config) => {
const eventStore = new FakeEventStore();
const featureTagStore = new FakeFeatureTagStore();
return new EventService({ eventStore, featureTagStore }, config);
};

View File

@ -54,6 +54,7 @@ import {
createDependentFeaturesService,
createFakeDependentFeaturesService,
} from '../dependent-features/createDependentFeaturesService';
import { createEventsService } from '../events/createEventsService';
export const createFakeExportImportTogglesService = (
config: IUnleashConfig,
@ -196,13 +197,7 @@ export const deferredExportImportTogglesService = (
const featureToggleService = createFeatureToggleService(db, config);
const privateProjectChecker = createPrivateProjectChecker(db, config);
const eventService = new EventService(
{
eventStore,
featureTagStore,
},
config,
);
const eventService = createEventsService(db, config);
const featureTagService = new FeatureTagService(
{

View File

@ -29,7 +29,6 @@ import { FakeAccountStore } from '../../../test/fixtures/fake-account-store';
import FakeAccessStore from '../../../test/fixtures/fake-access-store';
import FakeRoleStore from '../../../test/fixtures/fake-role-store';
import FakeEnvironmentStore from '../project-environments/fake-environment-store';
import EventStore from '../../db/event-store';
import {
createChangeRequestAccessReadModel,
createFakeChangeRequestAccessService,
@ -52,6 +51,7 @@ import {
createDependentFeaturesService,
createFakeDependentFeaturesService,
} from '../dependent-features/createDependentFeaturesService';
import { createEventsService } from '../events/createEventsService';
export const createFeatureToggleService = (
db: Db,
@ -99,11 +99,7 @@ export const createFeatureToggleService = (
const featureTagStore = new FeatureTagStore(db, eventBus, getLogger);
const roleStore = new RoleStore(db, eventBus, getLogger);
const environmentStore = new EnvironmentStore(db, eventBus, getLogger);
const eventStore = new EventStore(db, getLogger);
const eventService = new EventService(
{ eventStore, featureTagStore },
{ getLogger },
);
const eventService = createEventsService(db, config);
const groupService = new GroupService(
{ groupStore, accountStore },
{ getLogger },

View File

@ -1,24 +1,18 @@
import { IUnleashConfig } from '../../types';
import { EventService, GroupService } from '../../services';
import { GroupService } from '../../services';
import { Db } from '../../db/db';
import GroupStore from '../../db/group-store';
import { AccountStore } from '../../db/account-store';
import EventStore from '../../db/event-store';
import FeatureTagStore from '../../db/feature-tag-store';
import { createEventsService } from '../events/createEventsService';
export const createGroupService = (
db: Db,
config: IUnleashConfig,
): GroupService => {
const { getLogger, eventBus } = config;
const { getLogger } = config;
const groupStore = new GroupStore(db);
const accountStore = new AccountStore(db, getLogger);
const eventStore = new EventStore(db, getLogger);
const featureTagStore = new FeatureTagStore(db, eventBus, getLogger);
const eventService = new EventService(
{ eventStore, featureTagStore },
{ getLogger },
);
const eventService = createEventsService(db, config);
const groupService = new GroupService(
{ groupStore, accountStore },
{ getLogger },

View File

@ -1,8 +1,6 @@
import { Db } from '../../db/db';
import EventStore from '../../db/event-store';
import { IUnleashConfig } from '../../types';
import { EventService } from '../../services';
import FeatureTagStore from '../../db/feature-tag-store';
import FakeEventStore from '../../../test/fixtures/fake-event-store';
import FakeFeatureTagStore from '../../../test/fixtures/fake-feature-tag-store';
import EnvironmentService from './environment-service';
@ -14,13 +12,12 @@ import FakeFeatureEnvironmentStore from '../../../test/fixtures/fake-feature-env
import FakeProjectStore from '../../../test/fixtures/fake-project-store';
import FakeFeatureStrategiesStore from '../feature-toggle/fakes/fake-feature-strategies-store';
import FakeEnvironmentStore from './fake-environment-store';
import { createEventsService } from '../events/createEventsService';
export const createEnvironmentService =
(config: IUnleashConfig) =>
(db: Db): EnvironmentService => {
const { getLogger, eventBus, flagResolver } = config;
const eventStore = new EventStore(db, getLogger);
const featureTagStore = new FeatureTagStore(db, eventBus, getLogger);
const featureEnvironmentStore = new FeatureEnvironmentStore(
db,
eventBus,
@ -39,13 +36,7 @@ export const createEnvironmentService =
flagResolver,
);
const environmentStore = new EnvironmentStore(db, eventBus, getLogger);
const eventService = new EventService(
{
eventStore,
featureTagStore,
},
config,
);
const eventService = createEventsService(db, config);
return new EnvironmentService(
{
environmentStore,

View File

@ -1,5 +1,4 @@
import { Db, IUnleashConfig } from 'lib/server-impl';
import EventStore from '../../db/event-store';
import { EventService, SegmentService } from '../../services';
import FakeEventStore from '../../../test/fixtures/fake-event-store';
import { ISegmentService } from '../../segments/segment-service-interface';
@ -19,15 +18,14 @@ import {
createFakePrivateProjectChecker,
createPrivateProjectChecker,
} from '../private-project/createPrivateProjectChecker';
import FeatureTagStore from '../../db/feature-tag-store';
import FakeFeatureTagStore from '../../../test/fixtures/fake-feature-tag-store';
import { createEventsService } from '../events/createEventsService';
export const createSegmentService = (
db: Db,
config: IUnleashConfig,
): SegmentService => {
const { eventBus, getLogger, flagResolver } = config;
const eventStore = new EventStore(db, getLogger);
const segmentStore = new SegmentStore(
db,
eventBus,
@ -50,13 +48,7 @@ export const createSegmentService = (
const privateProjectChecker = createPrivateProjectChecker(db, config);
const eventService = new EventService(
{
eventStore,
featureTagStore: new FeatureTagStore(db, eventBus, getLogger),
},
config,
);
const eventService = createEventsService(db, config);
return new SegmentService(
{ segmentStore, featureStrategiesStore },

View File

@ -1,27 +1,18 @@
import { Db } from '../../db/db';
import EventStore from '../../db/event-store';
import { IUnleashConfig } from '../../types';
import { EventService } from '../../services';
import FeatureTagStore from '../../db/feature-tag-store';
import FakeEventStore from '../../../test/fixtures/fake-event-store';
import FakeFeatureTagStore from '../../../test/fixtures/fake-feature-tag-store';
import TagTypeService from './tag-type-service';
import TagTypeStore from './tag-type-store';
import FakeTagTypeStore from './fake-tag-type-store';
import {
createEventsService,
createFakeEventsService,
} from '../events/createEventsService';
export const createTagTypeService =
(config: IUnleashConfig) =>
(db: Db): TagTypeService => {
const { getLogger, eventBus } = config;
const eventStore = new EventStore(db, getLogger);
const featureTagStore = new FeatureTagStore(db, eventBus, getLogger);
const eventService = new EventService(
{
eventStore,
featureTagStore,
},
config,
);
const eventService = createEventsService(db, config);
const tagTypeStore = new TagTypeStore(db, eventBus, getLogger);
return new TagTypeService({ tagTypeStore }, config, eventService);
};
@ -29,15 +20,7 @@ export const createTagTypeService =
export const createFakeTagTypeService = (
config: IUnleashConfig,
): TagTypeService => {
const eventStore = new FakeEventStore();
const featureTagStore = new FakeFeatureTagStore();
const eventService = new EventService(
{
eventStore,
featureTagStore,
},
config,
);
const eventService = createFakeEventsService(config);
const tagTypeStore = new FakeTagTypeStore();
return new TagTypeService({ tagTypeStore }, config, eventService);

View File

@ -14,12 +14,10 @@ import FakeRoleStore from '../../test/fixtures/fake-role-store';
import FakeEnvironmentStore from '../features/project-environments/fake-environment-store';
import AccessStoreMock from '../../test/fixtures/fake-access-store';
import { GroupService } from '../services/group-service';
import FakeEventStore from '../../test/fixtures/fake-event-store';
import { IRole } from '../../lib/types/stores/access-store';
import { IGroup, ROLE_CREATED, SYSTEM_USER } from '../../lib/types';
import EventService from './event-service';
import FakeFeatureTagStore from '../../test/fixtures/fake-feature-tag-store';
import BadDataError from '../../lib/error/bad-data-error';
import { createFakeEventsService } from '../../lib/features/events/createEventsService';
function getSetup(customRootRolesKillSwitch: boolean = true) {
const config = createTestConfig({
@ -223,7 +221,6 @@ test('throws error when trying to delete a project role in use by group', async
getLogger,
});
const eventStore = new FakeEventStore();
const groupStore = new FakeGroupStore();
groupStore.getAllWithId = async (): Promise<IGroup[]> => {
return [{ id: 1, name: 'group' }];
@ -239,10 +236,7 @@ test('throws error when trying to delete a project role in use by group', async
accessStore.get = async (): Promise<IRole> => {
return { id: 1, type: 'custom', name: 'project role' };
};
const eventService = new EventService(
{ eventStore, featureTagStore: new FakeFeatureTagStore() },
config,
);
const eventService = createFakeEventsService(config);
const groupService = new GroupService(
{ groupStore, accountStore },
{ getLogger },