mirror of
https://github.com/Unleash/unleash.git
synced 2025-04-19 01:17:18 +02:00
refactor: segment in feature oriented architecture (#6434)
This commit is contained in:
parent
9eb4e7101a
commit
5d00157b7c
@ -26,7 +26,7 @@ import { FeatureEnvironmentStore } from './feature-environment-store';
|
|||||||
import { ClientMetricsStoreV2 } from '../features/metrics/client-metrics/client-metrics-store-v2';
|
import { ClientMetricsStoreV2 } from '../features/metrics/client-metrics/client-metrics-store-v2';
|
||||||
import UserSplashStore from './user-splash-store';
|
import UserSplashStore from './user-splash-store';
|
||||||
import RoleStore from './role-store';
|
import RoleStore from './role-store';
|
||||||
import SegmentStore from './segment-store';
|
import SegmentStore from '../features/segment/segment-store';
|
||||||
import GroupStore from './group-store';
|
import GroupStore from './group-store';
|
||||||
import PatStore from './pat-store';
|
import PatStore from './pat-store';
|
||||||
import { PublicSignupTokenStore } from './public-signup-token-store';
|
import { PublicSignupTokenStore } from './public-signup-token-store';
|
||||||
|
@ -96,7 +96,7 @@ import { AccessService } from '../../services/access-service';
|
|||||||
import { IUser } from '../../server-impl';
|
import { IUser } from '../../server-impl';
|
||||||
import { IFeatureProjectUserParams } from './feature-toggle-controller';
|
import { IFeatureProjectUserParams } from './feature-toggle-controller';
|
||||||
import { unique } from '../../util/unique';
|
import { unique } from '../../util/unique';
|
||||||
import { ISegmentService } from '../../segments/segment-service-interface';
|
import { ISegmentService } from '../segment/segment-service-interface';
|
||||||
import { IChangeRequestAccessReadModel } from '../change-request-access-service/change-request-access-read-model';
|
import { IChangeRequestAccessReadModel } from '../change-request-access-service/change-request-access-read-model';
|
||||||
import { checkFeatureFlagNamesAgainstPattern } from '../feature-naming-pattern/feature-naming-validation';
|
import { checkFeatureFlagNamesAgainstPattern } from '../feature-naming-pattern/feature-naming-validation';
|
||||||
import { IPrivateProjectChecker } from '../private-project/privateProjectCheckerType';
|
import { IPrivateProjectChecker } from '../private-project/privateProjectCheckerType';
|
||||||
|
@ -15,7 +15,7 @@ import {
|
|||||||
} from '../../../types';
|
} from '../../../types';
|
||||||
import EnvironmentService from '../../project-environments/environment-service';
|
import EnvironmentService from '../../project-environments/environment-service';
|
||||||
import { ForbiddenError, PatternError, PermissionError } from '../../../error';
|
import { ForbiddenError, PatternError, PermissionError } from '../../../error';
|
||||||
import { ISegmentService } from '../../../segments/segment-service-interface';
|
import { ISegmentService } from '../../segment/segment-service-interface';
|
||||||
import { createFeatureToggleService, createSegmentService } from '../..';
|
import { createFeatureToggleService, createSegmentService } from '../..';
|
||||||
import {
|
import {
|
||||||
insertFeatureEnvironmentsLastSeen,
|
insertFeatureEnvironmentsLastSeen,
|
||||||
|
@ -16,7 +16,7 @@ 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 '../../db/context-field-store';
|
||||||
import GroupStore from '../../db/group-store';
|
import GroupStore from '../../db/group-store';
|
||||||
import SegmentStore from '../../db/segment-store';
|
import SegmentStore from '../segment/segment-store';
|
||||||
import RoleStore from '../../db/role-store';
|
import RoleStore from '../../db/role-store';
|
||||||
import SettingStore from '../../db/setting-store';
|
import SettingStore from '../../db/setting-store';
|
||||||
import ClientInstanceStore from '../../db/client-instance-store';
|
import ClientInstanceStore from '../../db/client-instance-store';
|
||||||
|
@ -14,7 +14,7 @@ import { IGroupStore } from '../../types/stores/group-store';
|
|||||||
import { IProjectStore } from '../../features/project/project-store-type';
|
import { IProjectStore } from '../../features/project/project-store-type';
|
||||||
import { IStrategyStore } from '../../types/stores/strategy-store';
|
import { IStrategyStore } from '../../types/stores/strategy-store';
|
||||||
import { IUserStore } from '../../types/stores/user-store';
|
import { IUserStore } from '../../types/stores/user-store';
|
||||||
import { ISegmentStore } from '../../types/stores/segment-store';
|
import { ISegmentStore } from '../segment/segment-store-type';
|
||||||
import { IRoleStore } from '../../types/stores/role-store';
|
import { IRoleStore } from '../../types/stores/role-store';
|
||||||
import VersionService from '../../services/version-service';
|
import VersionService from '../../services/version-service';
|
||||||
import { ISettingStore } from '../../types/stores/settings-store';
|
import { ISettingStore } from '../../types/stores/settings-store';
|
||||||
|
@ -1,18 +1,18 @@
|
|||||||
import { randomId } from '../../../../lib/util/random-id';
|
import { randomId } from '../../util/random-id';
|
||||||
import { IFeatureToggleClient, ISegment } from '../../../../lib/types/model';
|
import { IFeatureToggleClient, ISegment } from '../../types/model';
|
||||||
import { collectIds } from '../../../../lib/util/collect-ids';
|
import { collectIds } from '../../util/collect-ids';
|
||||||
import dbInit, { ITestDb } from '../../helpers/database-init';
|
import dbInit, { ITestDb } from '../../../test/e2e/helpers/database-init';
|
||||||
import getLogger from '../../../fixtures/no-logger';
|
import getLogger from '../../../test/fixtures/no-logger';
|
||||||
import {
|
import {
|
||||||
addStrategyToFeatureEnv,
|
addStrategyToFeatureEnv,
|
||||||
createFeatureToggle,
|
createFeatureToggle,
|
||||||
} from '../../helpers/app.utils';
|
} from '../../../test/e2e/helpers/app.utils';
|
||||||
import {
|
import {
|
||||||
IUnleashTest,
|
IUnleashTest,
|
||||||
setupAppWithCustomConfig,
|
setupAppWithCustomConfig,
|
||||||
} from '../../helpers/test-helper';
|
} from '../../../test/e2e/helpers/test-helper';
|
||||||
import { StrategiesUsingSegment } from '../../../../lib/segments/segment-service-interface';
|
import { StrategiesUsingSegment } from './segment-service-interface';
|
||||||
import { IUser } from '../../../../lib/types';
|
import { IUser } from '../../types';
|
||||||
|
|
||||||
let app: IUnleashTest;
|
let app: IUnleashTest;
|
||||||
let db: ITestDb;
|
let db: ITestDb;
|
@ -1,30 +1,26 @@
|
|||||||
import dbInit, { ITestDb } from '../../helpers/database-init';
|
import dbInit, { ITestDb } from '../../../test/e2e/helpers/database-init';
|
||||||
import getLogger from '../../../fixtures/no-logger';
|
import getLogger from '../../../test/fixtures/no-logger';
|
||||||
import {
|
import {
|
||||||
IUnleashTest,
|
IUnleashTest,
|
||||||
setupAppWithCustomConfig,
|
setupAppWithCustomConfig,
|
||||||
} from '../../helpers/test-helper';
|
} from '../../../test/e2e/helpers/test-helper';
|
||||||
import {
|
import { IConstraint, IFeatureToggleClient, ISegment } from '../../types/model';
|
||||||
IConstraint,
|
import { randomId } from '../../util/random-id';
|
||||||
IFeatureToggleClient,
|
import User from '../../types/user';
|
||||||
ISegment,
|
|
||||||
} from '../../../../lib/types/model';
|
|
||||||
import { randomId } from '../../../../lib/util/random-id';
|
|
||||||
import User from '../../../../lib/types/user';
|
|
||||||
import {
|
import {
|
||||||
DEFAULT_SEGMENT_VALUES_LIMIT,
|
DEFAULT_SEGMENT_VALUES_LIMIT,
|
||||||
DEFAULT_STRATEGY_SEGMENTS_LIMIT,
|
DEFAULT_STRATEGY_SEGMENTS_LIMIT,
|
||||||
} from '../../../../lib/util/segments';
|
} from '../../util/segments';
|
||||||
import { collectIds } from '../../../../lib/util/collect-ids';
|
import { collectIds } from '../../util/collect-ids';
|
||||||
import { arraysHaveSameItems } from '../../../../lib/util/arraysHaveSameItems';
|
import { arraysHaveSameItems } from '../../util/arraysHaveSameItems';
|
||||||
import {
|
import {
|
||||||
CreateFeatureSchema,
|
CreateFeatureSchema,
|
||||||
CreateFeatureStrategySchema,
|
CreateFeatureStrategySchema,
|
||||||
FeatureStrategySchema,
|
FeatureStrategySchema,
|
||||||
UpsertSegmentSchema,
|
UpsertSegmentSchema,
|
||||||
} from '../../../../lib/openapi';
|
} from '../../openapi';
|
||||||
import { DEFAULT_ENV } from '../../../../lib/util';
|
import { DEFAULT_ENV } from '../../util';
|
||||||
import { DEFAULT_PROJECT } from '../../../../lib/types';
|
import { DEFAULT_PROJECT } from '../../types';
|
||||||
|
|
||||||
let db: ITestDb;
|
let db: ITestDb;
|
||||||
let app: IUnleashTest;
|
let app: IUnleashTest;
|
@ -1,9 +1,9 @@
|
|||||||
import { Db, IUnleashConfig } from '../../server-impl';
|
import { Db, IUnleashConfig } from '../../server-impl';
|
||||||
import { EventService, SegmentService } from '../../services';
|
import { EventService, SegmentService } from '../../services';
|
||||||
import FakeEventStore from '../../../test/fixtures/fake-event-store';
|
import FakeEventStore from '../../../test/fixtures/fake-event-store';
|
||||||
import { ISegmentService } from '../../segments/segment-service-interface';
|
import { ISegmentService } from './segment-service-interface';
|
||||||
import FeatureStrategiesStore from '../feature-toggle/feature-toggle-strategies-store';
|
import FeatureStrategiesStore from '../feature-toggle/feature-toggle-strategies-store';
|
||||||
import SegmentStore from '../../db/segment-store';
|
import SegmentStore from './segment-store';
|
||||||
import FakeSegmentStore from '../../../test/fixtures/fake-segment-store';
|
import FakeSegmentStore from '../../../test/fixtures/fake-segment-store';
|
||||||
import FakeFeatureStrategiesStore from '../feature-toggle/fakes/fake-feature-strategies-store';
|
import FakeFeatureStrategiesStore from '../feature-toggle/fakes/fake-feature-strategies-store';
|
||||||
import {
|
import {
|
||||||
|
@ -21,7 +21,7 @@ import {
|
|||||||
emptyResponse,
|
emptyResponse,
|
||||||
getStandardResponses,
|
getStandardResponses,
|
||||||
} from '../../openapi/util/standard-responses';
|
} from '../../openapi/util/standard-responses';
|
||||||
import { ISegmentService } from '../../segments/segment-service-interface';
|
import { ISegmentService } from './segment-service-interface';
|
||||||
import { SegmentStrategiesSchema } from '../../openapi/spec/segment-strategies-schema';
|
import { SegmentStrategiesSchema } from '../../openapi/spec/segment-strategies-schema';
|
||||||
import { AccessService, OpenApiService } from '../../services';
|
import { AccessService, OpenApiService } from '../../services';
|
||||||
import {
|
import {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import { ChangeRequestStrategy } from '../features/change-request-segment-usage-service/change-request-segment-usage-read-model';
|
import { ChangeRequestStrategy } from '../change-request-segment-usage-service/change-request-segment-usage-read-model';
|
||||||
import { UpsertSegmentSchema } from '../openapi';
|
import { UpsertSegmentSchema } from '../../openapi';
|
||||||
import { IFeatureStrategy, ISegment, IUser } from '../types';
|
import { IFeatureStrategy, ISegment, IUser } from '../../types';
|
||||||
|
|
||||||
export type StrategiesUsingSegment = {
|
export type StrategiesUsingSegment = {
|
||||||
strategies: IFeatureStrategy[];
|
strategies: IFeatureStrategy[];
|
@ -1,32 +1,32 @@
|
|||||||
import { IUnleashConfig } from '../types/option';
|
import { IUnleashConfig } from '../../types/option';
|
||||||
import {
|
import {
|
||||||
IFlagResolver,
|
IFlagResolver,
|
||||||
IUnleashStores,
|
IUnleashStores,
|
||||||
SKIP_CHANGE_REQUEST,
|
SKIP_CHANGE_REQUEST,
|
||||||
SYSTEM_USER,
|
SYSTEM_USER,
|
||||||
} from '../types';
|
} from '../../types';
|
||||||
import { Logger } from '../logger';
|
import { Logger } from '../../logger';
|
||||||
import NameExistsError from '../error/name-exists-error';
|
import NameExistsError from '../../error/name-exists-error';
|
||||||
import { ISegmentStore } from '../types/stores/segment-store';
|
import { ISegmentStore } from './segment-store-type';
|
||||||
import { ISegment } from '../types/model';
|
import { ISegment } from '../../types/model';
|
||||||
import { segmentSchema } from './segment-schema';
|
import { segmentSchema } from '../../services/segment-schema';
|
||||||
import {
|
import {
|
||||||
SEGMENT_CREATED,
|
SEGMENT_CREATED,
|
||||||
SEGMENT_DELETED,
|
SEGMENT_DELETED,
|
||||||
SEGMENT_UPDATED,
|
SEGMENT_UPDATED,
|
||||||
} from '../types/events';
|
} from '../../types/events';
|
||||||
import User from '../types/user';
|
import User from '../../types/user';
|
||||||
import { IFeatureStrategiesStore } from '../features/feature-toggle/types/feature-toggle-strategies-store-type';
|
import { IFeatureStrategiesStore } from '../feature-toggle/types/feature-toggle-strategies-store-type';
|
||||||
import BadDataError from '../error/bad-data-error';
|
import BadDataError from '../../error/bad-data-error';
|
||||||
import {
|
import {
|
||||||
ISegmentService,
|
ISegmentService,
|
||||||
StrategiesUsingSegment,
|
StrategiesUsingSegment,
|
||||||
} from '../segments/segment-service-interface';
|
} from './segment-service-interface';
|
||||||
import { PermissionError } from '../error';
|
import { PermissionError } from '../../error';
|
||||||
import { IChangeRequestAccessReadModel } from '../features/change-request-access-service/change-request-access-read-model';
|
import { IChangeRequestAccessReadModel } from '../change-request-access-service/change-request-access-read-model';
|
||||||
import { IPrivateProjectChecker } from '../features/private-project/privateProjectCheckerType';
|
import { IPrivateProjectChecker } from '../private-project/privateProjectCheckerType';
|
||||||
import EventService from '../features/events/event-service';
|
import EventService from '../events/event-service';
|
||||||
import { IChangeRequestSegmentUsageReadModel } from '../features/change-request-segment-usage-service/change-request-segment-usage-read-model';
|
import { IChangeRequestSegmentUsageReadModel } from '../change-request-segment-usage-service/change-request-segment-usage-read-model';
|
||||||
|
|
||||||
export class SegmentService implements ISegmentService {
|
export class SegmentService implements ISegmentService {
|
||||||
private logger: Logger;
|
private logger: Logger;
|
@ -1,6 +1,6 @@
|
|||||||
import { IFeatureStrategySegment, ISegment } from '../model';
|
import { IFeatureStrategySegment, ISegment } from '../../types/model';
|
||||||
import { Store } from './store';
|
import { Store } from '../../types/stores/store';
|
||||||
import User from '../user';
|
import User from '../../types/user';
|
||||||
|
|
||||||
export interface ISegmentStore extends Store<ISegment, number> {
|
export interface ISegmentStore extends Store<ISegment, number> {
|
||||||
getAll(includeChangeRequestUsageData?: boolean): Promise<ISegment[]>;
|
getAll(includeChangeRequestUsageData?: boolean): Promise<ISegment[]>;
|
@ -1,8 +1,8 @@
|
|||||||
import { ISegmentStore } from '../types/stores/segment-store';
|
import { ISegmentStore } from './segment-store-type';
|
||||||
import dbInit, { ITestDb } from '../../test/e2e/helpers/database-init';
|
import dbInit, { ITestDb } from '../../../test/e2e/helpers/database-init';
|
||||||
import getLogger from '../../test/fixtures/no-logger';
|
import getLogger from '../../../test/fixtures/no-logger';
|
||||||
import NotFoundError from '../error/notfound-error';
|
import NotFoundError from '../../error/notfound-error';
|
||||||
import { IUnleashStores, IUser } from '../types';
|
import { IUnleashStores, IUser } from '../../types';
|
||||||
|
|
||||||
let stores: IUnleashStores;
|
let stores: IUnleashStores;
|
||||||
let db: ITestDb;
|
let db: ITestDb;
|
@ -1,13 +1,17 @@
|
|||||||
import { ISegmentStore } from '../types/stores/segment-store';
|
import { ISegmentStore } from './segment-store-type';
|
||||||
import { IConstraint, IFeatureStrategySegment, ISegment } from '../types/model';
|
import {
|
||||||
import { Logger, LogProvider } from '../logger';
|
IConstraint,
|
||||||
|
IFeatureStrategySegment,
|
||||||
|
ISegment,
|
||||||
|
} from '../../types/model';
|
||||||
|
import { Logger, LogProvider } from '../../logger';
|
||||||
import EventEmitter from 'events';
|
import EventEmitter from 'events';
|
||||||
import NotFoundError from '../error/notfound-error';
|
import NotFoundError from '../../error/notfound-error';
|
||||||
import { PartialSome } from '../types/partial';
|
import { PartialSome } from '../../types/partial';
|
||||||
import User from '../types/user';
|
import User from '../../types/user';
|
||||||
import { Db } from './db';
|
import { Db } from '../../db/db';
|
||||||
import { IFlagResolver } from '../types';
|
import { IFlagResolver } from '../../types';
|
||||||
import { isDefined } from '../util';
|
import { isDefined } from '../../util';
|
||||||
|
|
||||||
const T = {
|
const T = {
|
||||||
segments: 'segments',
|
segments: 'segments',
|
@ -13,4 +13,4 @@ export * from './types';
|
|||||||
export * from './util';
|
export * from './util';
|
||||||
export * from './error';
|
export * from './error';
|
||||||
export * from './features';
|
export * from './features';
|
||||||
export * from './segments/segment-service-interface';
|
export * from './features/segment/segment-service-interface';
|
||||||
|
@ -8,7 +8,7 @@ import { createTestConfig } from '../../test/config/test-config';
|
|||||||
import FeatureToggleService from '../features/feature-toggle/feature-toggle-service';
|
import FeatureToggleService from '../features/feature-toggle/feature-toggle-service';
|
||||||
import { AccessService } from './access-service';
|
import { AccessService } from './access-service';
|
||||||
import { IChangeRequestAccessReadModel } from '../features/change-request-access-service/change-request-access-read-model';
|
import { IChangeRequestAccessReadModel } from '../features/change-request-access-service/change-request-access-read-model';
|
||||||
import { ISegmentService } from '../segments/segment-service-interface';
|
import { ISegmentService } from '../features/segment/segment-service-interface';
|
||||||
import { IPrivateProjectChecker } from '../features/private-project/privateProjectCheckerType';
|
import { IPrivateProjectChecker } from '../features/private-project/privateProjectCheckerType';
|
||||||
import { IDependentFeaturesReadModel } from '../features/dependent-features/dependent-features-read-model-type';
|
import { IDependentFeaturesReadModel } from '../features/dependent-features/dependent-features-read-model-type';
|
||||||
import EventService from '../features/events/event-service';
|
import EventService from '../features/events/event-service';
|
||||||
|
@ -26,7 +26,7 @@ import EnvironmentService from '../features/project-environments/environment-ser
|
|||||||
import FeatureTagService from './feature-tag-service';
|
import FeatureTagService from './feature-tag-service';
|
||||||
import ProjectHealthService from './project-health-service';
|
import ProjectHealthService from './project-health-service';
|
||||||
import UserSplashService from './user-splash-service';
|
import UserSplashService from './user-splash-service';
|
||||||
import { SegmentService } from './segment-service';
|
import { SegmentService } from '../features/segment/segment-service';
|
||||||
import { OpenApiService } from './openapi-service';
|
import { OpenApiService } from './openapi-service';
|
||||||
import { ClientSpecService } from './client-spec-service';
|
import { ClientSpecService } from './client-spec-service';
|
||||||
import { PlaygroundService } from '../features/playground/playground-service';
|
import { PlaygroundService } from '../features/playground/playground-service';
|
||||||
|
@ -50,7 +50,7 @@ import { IFeatureEnvironmentStore } from '../types/stores/feature-environment-st
|
|||||||
import { IUnleashStores } from '../types/stores';
|
import { IUnleashStores } from '../types/stores';
|
||||||
import { DEFAULT_ENV } from '../util/constants';
|
import { DEFAULT_ENV } from '../util/constants';
|
||||||
import { GLOBAL_ENV } from '../types/environment';
|
import { GLOBAL_ENV } from '../types/environment';
|
||||||
import { ISegmentStore } from '../types/stores/segment-store';
|
import { ISegmentStore } from '../features/segment/segment-store-type';
|
||||||
import { PartialSome } from '../types/partial';
|
import { PartialSome } from '../types/partial';
|
||||||
import EventService from '../features/events/event-service';
|
import EventService from '../features/events/event-service';
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ import {
|
|||||||
IExportService,
|
IExportService,
|
||||||
IImportService,
|
IImportService,
|
||||||
} from '../features/export-import-toggles/export-import-service';
|
} from '../features/export-import-toggles/export-import-service';
|
||||||
import { ISegmentService } from '../segments/segment-service-interface';
|
import { ISegmentService } from '../features/segment/segment-service-interface';
|
||||||
import ConfigurationRevisionService from '../features/feature-toggle/configuration-revision-service';
|
import ConfigurationRevisionService from '../features/feature-toggle/configuration-revision-service';
|
||||||
import EventAnnouncerService from '../services/event-announcer-service';
|
import EventAnnouncerService from '../services/event-announcer-service';
|
||||||
import { IPrivateProjectChecker } from '../features/private-project/privateProjectCheckerType';
|
import { IPrivateProjectChecker } from '../features/private-project/privateProjectCheckerType';
|
||||||
|
@ -24,7 +24,7 @@ import { IFeatureToggleClientStore } from '../features/client-feature-toggles/ty
|
|||||||
import { IClientMetricsStoreV2 } from '../features/metrics/client-metrics/client-metrics-store-v2-type';
|
import { IClientMetricsStoreV2 } from '../features/metrics/client-metrics/client-metrics-store-v2-type';
|
||||||
import { IUserSplashStore } from './stores/user-splash-store';
|
import { IUserSplashStore } from './stores/user-splash-store';
|
||||||
import { IRoleStore } from './stores/role-store';
|
import { IRoleStore } from './stores/role-store';
|
||||||
import { ISegmentStore } from './stores/segment-store';
|
import { ISegmentStore } from '../features/segment/segment-store-type';
|
||||||
import { IGroupStore } from './stores/group-store';
|
import { IGroupStore } from './stores/group-store';
|
||||||
import { IPatStore } from './stores/pat-store';
|
import { IPatStore } from './stores/pat-store';
|
||||||
import { IPublicSignupTokenStore } from './stores/public-signup-token-store';
|
import { IPublicSignupTokenStore } from './stores/public-signup-token-store';
|
||||||
|
2
src/test/fixtures/fake-segment-store.ts
vendored
2
src/test/fixtures/fake-segment-store.ts
vendored
@ -1,4 +1,4 @@
|
|||||||
import { ISegmentStore } from '../../lib/types/stores/segment-store';
|
import { ISegmentStore } from '../../lib/features/segment/segment-store-type';
|
||||||
import { IFeatureStrategySegment, ISegment } from '../../lib/types/model';
|
import { IFeatureStrategySegment, ISegment } from '../../lib/types/model';
|
||||||
|
|
||||||
export default class FakeSegmentStore implements ISegmentStore {
|
export default class FakeSegmentStore implements ISegmentStore {
|
||||||
|
Loading…
Reference in New Issue
Block a user