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

refactor: Context service feature oriented (#9052)

This commit is contained in:
Mateusz Kwasniewski 2025-01-03 10:23:47 +01:00 committed by GitHub
parent 9003a7eb91
commit eb0b7d5e4f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
26 changed files with 131 additions and 100 deletions

View File

@ -6,7 +6,7 @@ import FeatureTypeStore from './feature-type-store';
import StrategyStore from './strategy-store'; import StrategyStore from './strategy-store';
import ClientInstanceStore from './client-instance-store'; import ClientInstanceStore from './client-instance-store';
import ClientApplicationsStore from './client-applications-store'; import ClientApplicationsStore from './client-applications-store';
import ContextFieldStore from './context-field-store'; import ContextFieldStore from '../features/context/context-field-store';
import SettingStore from './setting-store'; import SettingStore from './setting-store';
import UserStore from './user-store'; import UserStore from './user-store';
import ProjectStore from '../features/project/project-store'; import ProjectStore from '../features/project/project-store';

View File

@ -1,4 +1,4 @@
import type { Store } from './store'; import type { Store } from '../../types/stores/store';
export interface IContextFieldDto { export interface IContextFieldDto {
name: string; name: string;

View File

@ -1,13 +1,13 @@
import type { Db } from './db'; import type { Db } from '../../db/db';
import type { Logger, LogProvider } from '../logger'; import type { Logger, LogProvider } from '../../logger';
import type { import type {
IContextField, IContextField,
IContextFieldDto, IContextFieldDto,
IContextFieldStore, IContextFieldStore,
ILegalValue, ILegalValue,
} from '../types/stores/context-field-store'; } from './context-field-store-type';
import NotFoundError from '../error/notfound-error'; import NotFoundError from '../../error/notfound-error';
import type { IFlagResolver } from '../types'; import type { IFlagResolver } from '../../types';
const COLUMNS = [ const COLUMNS = [
'name', 'name',

View File

@ -1,13 +1,15 @@
import type { Logger } from '../logger'; import type { Logger } from '../../logger';
import type { import type {
IContextField, IContextField,
IContextFieldDto, IContextFieldDto,
IContextFieldStore, IContextFieldStore,
} from '../types/stores/context-field-store'; } from './context-field-store-type';
import type { IProjectStore } from '../features/project/project-store-type'; import type {
import type { IFeatureStrategiesStore, IUnleashStores } from '../types/stores'; IFeatureStrategiesStore,
import type { IUnleashConfig } from '../types/option'; IUnleashStores,
import type { ContextFieldStrategiesSchema } from '../openapi/spec/context-field-strategies-schema'; } from '../../types/stores';
import type { IUnleashConfig } from '../../types/option';
import type { ContextFieldStrategiesSchema } from '../../openapi/spec/context-field-strategies-schema';
import { import {
CONTEXT_FIELD_CREATED, CONTEXT_FIELD_CREATED,
CONTEXT_FIELD_DELETED, CONTEXT_FIELD_DELETED,
@ -15,16 +17,14 @@ import {
type IAuditUser, type IAuditUser,
type IFeatureStrategy, type IFeatureStrategy,
type IFlagResolver, type IFlagResolver,
} from '../types'; } from '../../types';
import type { IPrivateProjectChecker } from '../features/private-project/privateProjectCheckerType'; import type { IPrivateProjectChecker } from '../private-project/privateProjectCheckerType';
import type EventService from '../features/events/event-service'; import type EventService from '../events/event-service';
import { contextSchema } from './context-schema'; import { contextSchema } from '../../services/context-schema';
import { NameExistsError } from '../error'; import { NameExistsError } from '../../error';
import { nameSchema } from '../schema/feature-schema'; import { nameSchema } from '../../schema/feature-schema';
class ContextService { class ContextService {
private projectStore: IProjectStore;
private eventService: EventService; private eventService: EventService;
private contextFieldStore: IContextFieldStore; private contextFieldStore: IContextFieldStore;
@ -39,13 +39,9 @@ class ContextService {
constructor( constructor(
{ {
projectStore,
contextFieldStore, contextFieldStore,
featureStrategiesStore, featureStrategiesStore,
}: Pick< }: Pick<IUnleashStores, 'contextFieldStore' | 'featureStrategiesStore'>,
IUnleashStores,
'projectStore' | 'contextFieldStore' | 'featureStrategiesStore'
>,
{ {
getLogger, getLogger,
flagResolver, flagResolver,
@ -54,7 +50,6 @@ class ContextService {
privateProjectChecker: IPrivateProjectChecker, privateProjectChecker: IPrivateProjectChecker,
) { ) {
this.privateProjectChecker = privateProjectChecker; this.privateProjectChecker = privateProjectChecker;
this.projectStore = projectStore;
this.eventService = eventService; this.eventService = eventService;
this.flagResolver = flagResolver; this.flagResolver = flagResolver;
this.contextFieldStore = contextFieldStore; this.contextFieldStore = contextFieldStore;

View File

@ -1,6 +1,6 @@
import type { Request, Response } from 'express'; import type { Request, Response } from 'express';
import Controller from '../controller'; import Controller from '../../routes/controller';
import { import {
CREATE_CONTEXT_FIELD, CREATE_CONTEXT_FIELD,
@ -10,9 +10,9 @@ import {
} from '../../types/permissions'; } from '../../types/permissions';
import type { IUnleashConfig } from '../../types/option'; import type { IUnleashConfig } from '../../types/option';
import type { IUnleashServices } from '../../types/services'; import type { IUnleashServices } from '../../types/services';
import type ContextService from '../../services/context-service'; import type ContextService from './context-service';
import type { Logger } from '../../logger'; import type { Logger } from '../../logger';
import type { IAuthRequest } from '../unleash-types'; import type { IAuthRequest } from '../../routes/unleash-types';
import type { OpenApiService } from '../../services/openapi-service'; import type { OpenApiService } from '../../services/openapi-service';
import { import {

View File

@ -0,0 +1,65 @@
import type { Db } from '../../db/db';
import type { IUnleashConfig } from '../../types';
import ContextService from './context-service';
import ContextFieldStore from './context-field-store';
import FeatureStrategiesStore from '../feature-toggle/feature-toggle-strategies-store';
import {
createEventsService,
createFakeEventsService,
} from '../events/createEventsService';
import { PrivateProjectChecker } from '../private-project/privateProjectChecker';
import PrivateProjectStore from '../private-project/privateProjectStore';
import FakeContextFieldStore from './fake-context-field-store';
import FakeFeatureStrategiesStore from '../feature-toggle/fakes/fake-feature-strategies-store';
import { FakePrivateProjectChecker } from '../private-project/fakePrivateProjectChecker';
export const createContextService =
(config: IUnleashConfig) =>
(db: Db): ContextService => {
const { getLogger, flagResolver, eventBus, isEnterprise } = config;
const contextFieldStore = new ContextFieldStore(
db,
getLogger,
flagResolver,
);
const featureStrategiesStore = new FeatureStrategiesStore(
db,
eventBus,
getLogger,
flagResolver,
);
const eventService = createEventsService(db, config);
const privateProjectStore = new PrivateProjectStore(db, getLogger);
const privateProjectChecker = new PrivateProjectChecker(
{ privateProjectStore },
{ isEnterprise },
);
return new ContextService(
{ contextFieldStore, featureStrategiesStore },
{
getLogger,
flagResolver,
},
eventService,
privateProjectChecker,
);
};
export const createFakeContextService = (
config: IUnleashConfig,
): ContextService => {
const { getLogger, flagResolver, eventBus, isEnterprise } = config;
const contextFieldStore = new FakeContextFieldStore();
const featureStrategiesStore = new FakeFeatureStrategiesStore();
const eventService = createFakeEventsService(config);
const privateProjectChecker = new FakePrivateProjectChecker();
return new ContextService(
{ contextFieldStore, featureStrategiesStore },
{
getLogger,
flagResolver,
},
eventService,
privateProjectChecker,
);
};

View File

@ -2,8 +2,8 @@ import type {
IContextField, IContextField,
IContextFieldDto, IContextFieldDto,
IContextFieldStore, IContextFieldStore,
} from '../../lib/types/stores/context-field-store'; } from './context-field-store-type';
import NotFoundError from '../../lib/error/notfound-error'; import NotFoundError from '../../error/notfound-error';
export default class FakeContextFieldStore implements IContextFieldStore { export default class FakeContextFieldStore implements IContextFieldStore {
count(): Promise<number> { count(): Promise<number> {

View File

@ -5,13 +5,11 @@ import { ImportTogglesStore } from './import-toggles-store';
import FeatureToggleStore from '../feature-toggle/feature-toggle-store'; import FeatureToggleStore from '../feature-toggle/feature-toggle-store';
import TagStore from '../../db/tag-store'; import TagStore from '../../db/tag-store';
import TagTypeStore from '../tag-type/tag-type-store'; import TagTypeStore from '../tag-type/tag-type-store';
import ProjectStore from '../project/project-store';
import FeatureTagStore from '../../db/feature-tag-store'; import FeatureTagStore from '../../db/feature-tag-store';
import StrategyStore from '../../db/strategy-store'; import StrategyStore from '../../db/strategy-store';
import ContextFieldStore from '../../db/context-field-store'; import ContextFieldStore from '../context/context-field-store';
import FeatureStrategiesStore from '../feature-toggle/feature-toggle-strategies-store'; import FeatureStrategiesStore from '../feature-toggle/feature-toggle-strategies-store';
import { import {
ContextService,
FeatureTagService, FeatureTagService,
StrategyService, StrategyService,
TagTypeService, TagTypeService,
@ -28,17 +26,12 @@ import { FeatureEnvironmentStore } from '../../db/feature-environment-store';
import FakeFeatureToggleStore from '../feature-toggle/fakes/fake-feature-toggle-store'; import FakeFeatureToggleStore from '../feature-toggle/fakes/fake-feature-toggle-store';
import FakeTagStore from '../../../test/fixtures/fake-tag-store'; import FakeTagStore from '../../../test/fixtures/fake-tag-store';
import FakeTagTypeStore from '../tag-type/fake-tag-type-store'; import FakeTagTypeStore from '../tag-type/fake-tag-type-store';
import FakeProjectStore from '../../../test/fixtures/fake-project-store';
import FakeFeatureTagStore from '../../../test/fixtures/fake-feature-tag-store'; import FakeFeatureTagStore from '../../../test/fixtures/fake-feature-tag-store';
import FakeContextFieldStore from '../../../test/fixtures/fake-context-field-store'; import FakeContextFieldStore from '../context/fake-context-field-store';
import FakeFeatureStrategiesStore from '../feature-toggle/fakes/fake-feature-strategies-store'; import FakeFeatureStrategiesStore from '../feature-toggle/fakes/fake-feature-strategies-store';
import FakeFeatureEnvironmentStore from '../../../test/fixtures/fake-feature-environment-store'; import FakeFeatureEnvironmentStore from '../../../test/fixtures/fake-feature-environment-store';
import FakeStrategiesStore from '../../../test/fixtures/fake-strategies-store'; import FakeStrategiesStore from '../../../test/fixtures/fake-strategies-store';
import EventStore from '../events/event-store'; import { createPrivateProjectChecker } from '../private-project/createPrivateProjectChecker';
import {
createFakePrivateProjectChecker,
createPrivateProjectChecker,
} from '../private-project/createPrivateProjectChecker';
import type { DeferredServiceFactory } from '../../db/transaction'; import type { DeferredServiceFactory } from '../../db/transaction';
import { DependentFeaturesReadModel } from '../dependent-features/dependent-features-read-model'; import { DependentFeaturesReadModel } from '../dependent-features/dependent-features-read-model';
import { FakeDependentFeaturesReadModel } from '../dependent-features/fake-dependent-features-read-model'; import { FakeDependentFeaturesReadModel } from '../dependent-features/fake-dependent-features-read-model';
@ -52,16 +45,19 @@ import {
} from '../events/createEventsService'; } from '../events/createEventsService';
import { SegmentReadModel } from '../segment/segment-read-model'; import { SegmentReadModel } from '../segment/segment-read-model';
import { FakeSegmentReadModel } from '../segment/fake-segment-read-model'; import { FakeSegmentReadModel } from '../segment/fake-segment-read-model';
import {
createContextService,
createFakeContextService,
} from '../context/createContextService';
export const createFakeExportImportTogglesService = ( export const createFakeExportImportTogglesService = (
config: IUnleashConfig, config: IUnleashConfig,
): ExportImportService => { ): ExportImportService => {
const { getLogger, flagResolver } = config; const { getLogger } = config;
const importTogglesStore = {} as ImportTogglesStore; const importTogglesStore = {} as ImportTogglesStore;
const featureToggleStore = new FakeFeatureToggleStore(); const featureToggleStore = new FakeFeatureToggleStore();
const tagStore = new FakeTagStore(); const tagStore = new FakeTagStore();
const tagTypeStore = new FakeTagTypeStore(); const tagTypeStore = new FakeTagTypeStore();
const projectStore = new FakeProjectStore();
const featureTagStore = new FakeFeatureTagStore(); const featureTagStore = new FakeFeatureTagStore();
const strategyStore = new FakeStrategiesStore(); const strategyStore = new FakeStrategiesStore();
const contextFieldStore = new FakeContextFieldStore(); const contextFieldStore = new FakeContextFieldStore();
@ -69,7 +65,6 @@ export const createFakeExportImportTogglesService = (
const featureEnvironmentStore = new FakeFeatureEnvironmentStore(); const featureEnvironmentStore = new FakeFeatureEnvironmentStore();
const { accessService } = createFakeAccessService(config); const { accessService } = createFakeAccessService(config);
const { featureToggleService } = createFakeFeatureToggleService(config); const { featureToggleService } = createFakeFeatureToggleService(config);
const privateProjectChecker = createFakePrivateProjectChecker();
const eventService = createFakeEventsService(config); const eventService = createFakeEventsService(config);
@ -82,16 +77,7 @@ export const createFakeExportImportTogglesService = (
{ getLogger }, { getLogger },
eventService, eventService,
); );
const contextService = new ContextService( const contextService = createFakeContextService(config);
{
projectStore,
contextFieldStore,
featureStrategiesStore,
},
{ getLogger, flagResolver },
eventService,
privateProjectChecker,
);
const strategyService = new StrategyService( const strategyService = new StrategyService(
{ strategyStore }, { strategyStore },
{ getLogger }, { getLogger },
@ -108,7 +94,7 @@ export const createFakeExportImportTogglesService = (
const dependentFeaturesService = createFakeDependentFeaturesService(config); const dependentFeaturesService = createFakeDependentFeaturesService(config);
const exportImportService = new ExportImportService( return new ExportImportService(
{ {
importTogglesStore, importTogglesStore,
featureStrategiesStore, featureStrategiesStore,
@ -132,8 +118,6 @@ export const createFakeExportImportTogglesService = (
dependentFeaturesReadModel, dependentFeaturesReadModel,
segmentReadModel, segmentReadModel,
); );
return exportImportService;
}; };
export const deferredExportImportTogglesService = ( export const deferredExportImportTogglesService = (
@ -150,7 +134,6 @@ export const deferredExportImportTogglesService = (
); );
const tagStore = new TagStore(db, eventBus, getLogger); const tagStore = new TagStore(db, eventBus, getLogger);
const tagTypeStore = new TagTypeStore(db, eventBus, getLogger); const tagTypeStore = new TagTypeStore(db, eventBus, getLogger);
const projectStore = new ProjectStore(db, eventBus, config);
const featureTagStore = new FeatureTagStore(db, eventBus, getLogger); const featureTagStore = new FeatureTagStore(db, eventBus, getLogger);
const strategyStore = new StrategyStore(db, getLogger); const strategyStore = new StrategyStore(db, getLogger);
const contextFieldStore = new ContextFieldStore( const contextFieldStore = new ContextFieldStore(
@ -169,11 +152,9 @@ export const deferredExportImportTogglesService = (
eventBus, eventBus,
config, config,
); );
const eventStore = new EventStore(db, getLogger);
const accessService = createAccessService(db, config); const accessService = createAccessService(db, config);
const featureToggleService = createFeatureToggleService(db, config); const featureToggleService = createFeatureToggleService(db, config);
const privateProjectChecker = createPrivateProjectChecker(db, config); createPrivateProjectChecker(db, config);
const eventService = createEventsService(db, config); const eventService = createEventsService(db, config);
const featureTagService = new FeatureTagService( const featureTagService = new FeatureTagService(
@ -185,16 +166,7 @@ export const deferredExportImportTogglesService = (
{ getLogger }, { getLogger },
eventService, eventService,
); );
const contextService = new ContextService( const contextService = createContextService(config)(db);
{
projectStore,
contextFieldStore,
featureStrategiesStore,
},
{ getLogger, flagResolver },
eventService,
privateProjectChecker,
);
const strategyService = new StrategyService( const strategyService = new StrategyService(
{ strategyStore }, { strategyStore },
{ getLogger }, { getLogger },
@ -212,7 +184,7 @@ export const deferredExportImportTogglesService = (
const dependentFeaturesService = const dependentFeaturesService =
createDependentFeaturesService(config)(db); createDependentFeaturesService(config)(db);
const exportImportService = new ExportImportService( return new ExportImportService(
{ {
importTogglesStore, importTogglesStore,
featureStrategiesStore, featureStrategiesStore,
@ -236,8 +208,6 @@ export const deferredExportImportTogglesService = (
dependentFeaturesReadModel, dependentFeaturesReadModel,
segmentReadModel, segmentReadModel,
); );
return exportImportService;
}; };
}; };
export const createExportImportTogglesService = ( export const createExportImportTogglesService = (

View File

@ -15,7 +15,7 @@ import {
RoleName, RoleName,
} from '../../types'; } from '../../types';
import type { ImportTogglesSchema, VariantsSchema } from '../../openapi'; import type { ImportTogglesSchema, VariantsSchema } from '../../openapi';
import type { IContextFieldDto } from '../../types/stores/context-field-store'; import type { IContextFieldDto } from '../context/context-field-store-type';
import type { AccessService } from '../../services'; import type { AccessService } from '../../services';
import { DEFAULT_ENV } from '../../util'; import { DEFAULT_ENV } from '../../util';
import type { IRole } from '../../types/stores/access-store'; import type { IRole } from '../../types/stores/access-store';

View File

@ -25,7 +25,7 @@ import type {
UpsertSegmentSchema, UpsertSegmentSchema,
VariantsSchema, VariantsSchema,
} from '../../openapi'; } from '../../openapi';
import type { IContextFieldDto } from '../../types/stores/context-field-store'; import type { IContextFieldDto } from '../context/context-field-store-type';
let app: IUnleashTest; let app: IUnleashTest;
let db: ITestDb; let db: ITestDb;

View File

@ -1,4 +1,4 @@
import type { IContextFieldDto } from '../../types/stores/context-field-store'; import type { IContextFieldDto } from '../context/context-field-store-type';
export const isValidField = ( export const isValidField = (
importedField: IContextFieldDto, importedField: IContextFieldDto,

View File

@ -2,7 +2,7 @@ import type {
FeatureStrategySchema, FeatureStrategySchema,
ImportTogglesValidateItemSchema, ImportTogglesValidateItemSchema,
} from '../../openapi'; } from '../../openapi';
import type { IContextFieldDto } from '../../types/stores/context-field-store'; import type { IContextFieldDto } from '../context/context-field-store-type';
import type { FeatureNameCheckResultWithFeaturePattern } from '../feature-toggle/feature-toggle-service'; import type { FeatureNameCheckResultWithFeaturePattern } from '../feature-toggle/feature-toggle-service';
import type { ProjectFeaturesLimit } from './import-toggles-store-type'; import type { ProjectFeaturesLimit } from './import-toggles-store-type';

View File

@ -8,7 +8,7 @@ import FeatureToggleStore from './feature-toggle-store';
import FeatureToggleClientStore from '../client-feature-toggles/client-feature-toggle-store'; import FeatureToggleClientStore from '../client-feature-toggles/client-feature-toggle-store';
import ProjectStore from '../project/project-store'; import ProjectStore from '../project/project-store';
import { FeatureEnvironmentStore } from '../../db/feature-environment-store'; import { FeatureEnvironmentStore } from '../../db/feature-environment-store';
import ContextFieldStore from '../../db/context-field-store'; import ContextFieldStore from '../context/context-field-store';
import GroupStore from '../../db/group-store'; import GroupStore from '../../db/group-store';
import { AccountStore } from '../../db/account-store'; import { AccountStore } from '../../db/account-store';
import { AccessStore } from '../../db/access-store'; import { AccessStore } from '../../db/access-store';
@ -22,7 +22,7 @@ import FakeFeatureToggleStore from './fakes/fake-feature-toggle-store';
import FakeClientFeatureToggleStore from '../client-feature-toggles/fakes/fake-client-feature-toggle-store'; import FakeClientFeatureToggleStore from '../client-feature-toggles/fakes/fake-client-feature-toggle-store';
import FakeProjectStore from '../../../test/fixtures/fake-project-store'; import FakeProjectStore from '../../../test/fixtures/fake-project-store';
import FakeFeatureEnvironmentStore from '../../../test/fixtures/fake-feature-environment-store'; import FakeFeatureEnvironmentStore from '../../../test/fixtures/fake-feature-environment-store';
import FakeContextFieldStore from '../../../test/fixtures/fake-context-field-store'; import FakeContextFieldStore from '../context/fake-context-field-store';
import FakeGroupStore from '../../../test/fixtures/fake-group-store'; import FakeGroupStore from '../../../test/fixtures/fake-group-store';
import { FakeAccountStore } from '../../../test/fixtures/fake-account-store'; import { FakeAccountStore } from '../../../test/fixtures/fake-account-store';
import FakeAccessStore from '../../../test/fixtures/fake-access-store'; import FakeAccessStore from '../../../test/fixtures/fake-access-store';

View File

@ -86,7 +86,7 @@ import {
validateSemver, validateSemver,
validateString, validateString,
} from '../../util/validators/constraint-types'; } from '../../util/validators/constraint-types';
import type { IContextFieldStore } from '../../types/stores/context-field-store'; import type { IContextFieldStore } from '../context/context-field-store-type';
import type { SetStrategySortOrderSchema } from '../../openapi/spec/set-strategy-sort-order-schema'; import type { SetStrategySortOrderSchema } from '../../openapi/spec/set-strategy-sort-order-schema';
import { import {
getDefaultStrategy, getDefaultStrategy,

View File

@ -14,7 +14,7 @@ import UserStore from '../../db/user-store';
import ProjectStore from '../project/project-store'; import ProjectStore from '../project/project-store';
import EnvironmentStore from '../project-environments/environment-store'; import EnvironmentStore from '../project-environments/environment-store';
import StrategyStore from '../../db/strategy-store'; import StrategyStore from '../../db/strategy-store';
import ContextFieldStore from '../../db/context-field-store'; import ContextFieldStore from '../context/context-field-store';
import GroupStore from '../../db/group-store'; import GroupStore from '../../db/group-store';
import SegmentStore from '../segment/segment-store'; import SegmentStore from '../segment/segment-store';
import RoleStore from '../../db/role-store'; import RoleStore from '../../db/role-store';
@ -30,7 +30,7 @@ import FakeFeatureToggleStore from '../feature-toggle/fakes/fake-feature-toggle-
import FakeProjectStore from '../../../test/fixtures/fake-project-store'; import FakeProjectStore from '../../../test/fixtures/fake-project-store';
import FakeEnvironmentStore from '../project-environments/fake-environment-store'; import FakeEnvironmentStore from '../project-environments/fake-environment-store';
import FakeGroupStore from '../../../test/fixtures/fake-group-store'; import FakeGroupStore from '../../../test/fixtures/fake-group-store';
import FakeContextFieldStore from '../../../test/fixtures/fake-context-field-store'; import FakeContextFieldStore from '../context/fake-context-field-store';
import FakeRoleStore from '../../../test/fixtures/fake-role-store'; import FakeRoleStore from '../../../test/fixtures/fake-role-store';
import FakeClientInstanceStore from '../../../test/fixtures/fake-client-instance-store'; import FakeClientInstanceStore from '../../../test/fixtures/fake-client-instance-store';
import FakeClientMetricsStoreV2 from '../metrics/client-metrics/fake-client-metrics-store-v2'; import FakeClientMetricsStoreV2 from '../metrics/client-metrics/fake-client-metrics-store-v2';

View File

@ -10,7 +10,7 @@ import type {
ITrafficDataUsageStore, ITrafficDataUsageStore,
IUnleashStores, IUnleashStores,
} from '../../types/stores'; } from '../../types/stores';
import type { IContextFieldStore } from '../../types/stores/context-field-store'; import type { IContextFieldStore } from '../context/context-field-store-type';
import type { IEnvironmentStore } from '../project-environments/environment-store-type'; import type { IEnvironmentStore } from '../project-environments/environment-store-type';
import type { IFeatureToggleStore } from '../feature-toggle/types/feature-toggle-store-type'; import type { IFeatureToggleStore } from '../feature-toggle/types/feature-toggle-store-type';
import type { IGroupStore } from '../../types/stores/group-store'; import type { IGroupStore } from '../../types/stores/group-store';

View File

@ -9,7 +9,7 @@ import PlaygroundController from '../../features/playground/playground';
import MetricsController from './metrics'; import MetricsController from './metrics';
import UserController from './user/user'; import UserController from './user/user';
import ConfigController from './config'; import ConfigController from './config';
import { ContextController } from './context'; import { ContextController } from '../../features/context/context';
import ClientMetricsController from '../../features/metrics/client-metrics/client-metrics'; import ClientMetricsController from '../../features/metrics/client-metrics/client-metrics';
import TagController from './tag'; import TagController from './tag';
import TagTypeController from '../../features/tag-type/tag-type'; import TagTypeController from '../../features/tag-type/tag-type';

View File

@ -14,7 +14,7 @@ import TagTypeService from '../features/tag-type/tag-type-service';
import TagService from './tag-service'; import TagService from './tag-service';
import StrategyService from './strategy-service'; import StrategyService from './strategy-service';
import AddonService from './addon-service'; import AddonService from './addon-service';
import ContextService from './context-service'; import ContextService from '../features/context/context-service';
import VersionService from './version-service'; import VersionService from './version-service';
import { EmailService } from './email-service'; import { EmailService } from './email-service';
import { AccessService } from './access-service'; import { AccessService } from './access-service';
@ -153,6 +153,10 @@ import {
createProjectStatusService, createProjectStatusService,
} from '../features/project-status/createProjectStatusService'; } from '../features/project-status/createProjectStatusService';
import { ProjectStatusService } from '../features/project-status/project-status-service'; import { ProjectStatusService } from '../features/project-status/project-status-service';
import {
createContextService,
createFakeContextService,
} from '../features/context/createContextService';
export const createServices = ( export const createServices = (
stores: IUnleashStores, stores: IUnleashStores,
@ -196,12 +200,9 @@ export const createServices = (
? new FeatureLifecycleReadModel(db, config.flagResolver) ? new FeatureLifecycleReadModel(db, config.flagResolver)
: new FakeFeatureLifecycleReadModel(); : new FakeFeatureLifecycleReadModel();
const contextService = new ContextService( const contextService = db
stores, ? withTransactional(createContextService(config), db)
config, : withFakeTransactional(createFakeContextService(config));
eventService,
privateProjectChecker,
);
const emailService = new EmailService(config); const emailService = new EmailService(config);
const featureTypeService = new FeatureTypeService( const featureTypeService = new FeatureTypeService(
stores, stores,

View File

@ -5,7 +5,7 @@ import type StrategyService from '../services/strategy-service';
import type TagTypeService from '../features/tag-type/tag-type-service'; import type TagTypeService from '../features/tag-type/tag-type-service';
import type TagService from '../services/tag-service'; import type TagService from '../services/tag-service';
import type ClientInstanceService from '../features/metrics/instance/instance-service'; import type ClientInstanceService from '../features/metrics/instance/instance-service';
import type ContextService from '../services/context-service'; import type ContextService from '../features/context/context-service';
import type VersionService from '../services/version-service'; import type VersionService from '../services/version-service';
import type { ApiTokenService } from '../services/api-token-service'; import type { ApiTokenService } from '../services/api-token-service';
import type { EmailService } from '../services/email-service'; import type { EmailService } from '../services/email-service';

View File

@ -5,7 +5,7 @@ import { IStrategyStore } from './stores/strategy-store';
import { IClientApplicationsStore } from './stores/client-applications-store'; import { IClientApplicationsStore } from './stores/client-applications-store';
import { IClientInstanceStore } from './stores/client-instance-store'; import { IClientInstanceStore } from './stores/client-instance-store';
import { IFeatureToggleStore } from '../features/feature-toggle/types/feature-toggle-store-type'; import { IFeatureToggleStore } from '../features/feature-toggle/types/feature-toggle-store-type';
import { IContextFieldStore } from './stores/context-field-store'; import { IContextFieldStore } from '../features/context/context-field-store-type';
import { ISettingStore } from './stores/settings-store'; import { ISettingStore } from './stores/settings-store';
import { ISessionStore } from './stores/session-store'; import { ISessionStore } from './stores/session-store';
import { ITagStore } from './stores/tag-store'; import { ITagStore } from './stores/tag-store';

View File

@ -1,5 +1,5 @@
import { validateSemver, validateLegalValues } from './constraint-types'; import { validateSemver, validateLegalValues } from './constraint-types';
import type { ILegalValue } from '../../types/stores/context-field-store'; import type { ILegalValue } from '../../features/context/context-field-store-type';
const legalValues: Readonly<ILegalValue[]> = [ const legalValues: Readonly<ILegalValue[]> = [
{ value: '100' }, { value: '100' },

View File

@ -4,7 +4,7 @@ import {
constraintStringTypeSchema, constraintStringTypeSchema,
} from '../../schema/constraint-value-types'; } from '../../schema/constraint-value-types';
import BadDataError from '../../error/bad-data-error'; import BadDataError from '../../error/bad-data-error';
import type { ILegalValue } from '../../types/stores/context-field-store'; import type { ILegalValue } from '../../features/context/context-field-store-type';
import { parseStrictSemVer } from '../semver'; import { parseStrictSemVer } from '../semver';
export const validateNumber = async (value: unknown): Promise<void> => { export const validateNumber = async (value: unknown): Promise<void> => {

View File

@ -12,7 +12,7 @@ import {
} from '../../../lib/types'; } from '../../../lib/types';
import type { IUnleashServices } from '../../../lib/types/services'; import type { IUnleashServices } from '../../../lib/types/services';
import type { Db } from '../../../lib/db/db'; import type { Db } from '../../../lib/db/db';
import type { IContextFieldDto } from '../../../lib/types/stores/context-field-store'; import type { IContextFieldDto } from '../../../lib/features/context/context-field-store-type';
import { DEFAULT_ENV } from '../../../lib/util'; import { DEFAULT_ENV } from '../../../lib/util';
import type { import type {
CreateDependentFeatureSchema, CreateDependentFeatureSchema,

View File

@ -1,6 +1,6 @@
import dbInit, { type ITestDb } from '../helpers/database-init'; import dbInit, { type ITestDb } from '../helpers/database-init';
import getLogger from '../../fixtures/no-logger'; import getLogger from '../../fixtures/no-logger';
import type { IContextFieldDto } from '../../../lib/types/stores/context-field-store'; import type { IContextFieldDto } from '../../../lib/features/context/context-field-store-type';
import fc, { type Arbitrary } from 'fast-check'; import fc, { type Arbitrary } from 'fast-check';
import type { IUnleashStores } from '../../../lib/types'; import type { IUnleashStores } from '../../../lib/types';

View File

@ -5,7 +5,7 @@ import FakeFeatureToggleStore from '../../lib/features/feature-toggle/fakes/fake
import FakeTagStore from './fake-tag-store'; import FakeTagStore from './fake-tag-store';
import FakeTagTypeStore from '../../lib/features/tag-type/fake-tag-type-store'; import FakeTagTypeStore from '../../lib/features/tag-type/fake-tag-type-store';
import FakeEventStore from './fake-event-store'; import FakeEventStore from './fake-event-store';
import FakeContextFieldStore from './fake-context-field-store'; import FakeContextFieldStore from '../../lib/features/context/fake-context-field-store';
import FakeSettingStore from './fake-setting-store'; import FakeSettingStore from './fake-setting-store';
import FakeAddonStore from './fake-addon-store'; import FakeAddonStore from './fake-addon-store';
import FakeProjectStore from './fake-project-store'; import FakeProjectStore from './fake-project-store';