diff --git a/src/lib/services/feature-toggle-service.ts b/src/lib/services/feature-toggle-service.ts index b7baef6253..71d7315291 100644 --- a/src/lib/services/feature-toggle-service.ts +++ b/src/lib/services/feature-toggle-service.ts @@ -834,28 +834,6 @@ class FeatureToggleService { return { ...legacyFeature, enabled, strategies }; } - async changeProject( - featureName: string, - newProject: string, - createdBy: string, - ): Promise { - const feature = await this.featureToggleStore.get(featureName); - const oldProject = feature.project; - feature.project = newProject; - await this.featureToggleStore.update(newProject, feature); - - const tags = await this.tagStore.getAllTagsForFeature(featureName); - await this.eventStore.store( - new FeatureChangeProjectEvent({ - createdBy, - oldProject, - newProject, - featureName, - tags, - }), - ); - } - async getArchivedFeatures(): Promise { return this.getFeatureToggles({}, true); } diff --git a/src/lib/services/project-service.ts b/src/lib/services/project-service.ts index 4b641c0f05..fc33379401 100644 --- a/src/lib/services/project-service.ts +++ b/src/lib/services/project-service.ts @@ -6,6 +6,7 @@ import { nameType } from '../routes/util'; import { projectSchema } from './project-schema'; import NotFoundError from '../error/notfound-error'; import { + FeatureChangeProjectEvent, PROJECT_CREATED, PROJECT_DELETED, PROJECT_UPDATED, @@ -28,14 +29,11 @@ import { IProjectQuery, IProjectStore } from '../types/stores/project-store'; import { IRoleDescriptor } from '../types/stores/access-store'; import { IEventStore } from '../types/stores/event-store'; import FeatureToggleService from './feature-toggle-service'; -import { - CREATE_FEATURE, - MOVE_FEATURE_TOGGLE, - UPDATE_FEATURE, -} from '../types/permissions'; +import { MOVE_FEATURE_TOGGLE } from '../types/permissions'; import NoAccessError from '../error/no-access-error'; import IncompatibleProjectError from '../error/incompatible-project-error'; import { DEFAULT_PROJECT } from '../types/project'; +import { IFeatureTagStore } from 'lib/types/stores/feature-tag-store'; const getCreatedBy = (user: User) => user.email || user.username; @@ -63,6 +61,8 @@ export default class ProjectService { private featureToggleService: FeatureToggleService; + private tagStore: IFeatureTagStore; + constructor( { projectStore, @@ -71,6 +71,7 @@ export default class ProjectService { featureTypeStore, environmentStore, featureEnvironmentStore, + featureTagStore, }: Pick< IUnleashStores, | 'projectStore' @@ -79,6 +80,7 @@ export default class ProjectService { | 'featureTypeStore' | 'environmentStore' | 'featureEnvironmentStore' + | 'featureTagStore' >, config: IUnleashConfig, accessService: AccessService, @@ -92,6 +94,7 @@ export default class ProjectService { this.featureToggleStore = featureToggleStore; this.featureTypeStore = featureTypeStore; this.featureToggleService = featureToggleService; + this.tagStore = featureTagStore; this.logger = config.getLogger('services/project-service.js'); } @@ -224,6 +227,17 @@ export default class ProjectService { newProjectId, ); + const tags = await this.tagStore.getAllTagsForFeature(featureName); + await this.eventStore.store( + new FeatureChangeProjectEvent({ + createdBy: user.username, + oldProject: currentProjectId, + newProject: newProjectId, + featureName, + tags, + }), + ); + return updatedFeature; }