1
0
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:
Mateusz Kwasniewski 2024-03-05 14:45:41 +01:00 committed by GitHub
parent 9eb4e7101a
commit 5d00157b7c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
21 changed files with 77 additions and 77 deletions

View File

@ -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';

View File

@ -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';

View File

@ -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,

View File

@ -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';

View File

@ -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';

View File

@ -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;

View File

@ -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;

View File

@ -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 {

View File

@ -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 {

View File

@ -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[];

View File

@ -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;

View File

@ -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[]>;

View File

@ -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;

View File

@ -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',

View File

@ -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';

View File

@ -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';

View File

@ -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';

View File

@ -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';

View File

@ -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';

View File

@ -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';

View File

@ -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 {