1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-08-18 13:48:58 +02:00

fix: add event for changeProject

This commit is contained in:
Fredrik Oseberg 2022-01-11 13:52:59 +01:00
parent e8db1da60a
commit 808a9f5229
2 changed files with 19 additions and 27 deletions

View File

@ -834,28 +834,6 @@ class FeatureToggleService {
return { ...legacyFeature, enabled, strategies }; return { ...legacyFeature, enabled, strategies };
} }
async changeProject(
featureName: string,
newProject: string,
createdBy: string,
): Promise<void> {
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<FeatureToggle[]> { async getArchivedFeatures(): Promise<FeatureToggle[]> {
return this.getFeatureToggles({}, true); return this.getFeatureToggles({}, true);
} }

View File

@ -6,6 +6,7 @@ import { nameType } from '../routes/util';
import { projectSchema } from './project-schema'; import { projectSchema } from './project-schema';
import NotFoundError from '../error/notfound-error'; import NotFoundError from '../error/notfound-error';
import { import {
FeatureChangeProjectEvent,
PROJECT_CREATED, PROJECT_CREATED,
PROJECT_DELETED, PROJECT_DELETED,
PROJECT_UPDATED, PROJECT_UPDATED,
@ -28,14 +29,11 @@ import { IProjectQuery, IProjectStore } from '../types/stores/project-store';
import { IRoleDescriptor } from '../types/stores/access-store'; import { IRoleDescriptor } from '../types/stores/access-store';
import { IEventStore } from '../types/stores/event-store'; import { IEventStore } from '../types/stores/event-store';
import FeatureToggleService from './feature-toggle-service'; import FeatureToggleService from './feature-toggle-service';
import { import { MOVE_FEATURE_TOGGLE } from '../types/permissions';
CREATE_FEATURE,
MOVE_FEATURE_TOGGLE,
UPDATE_FEATURE,
} from '../types/permissions';
import NoAccessError from '../error/no-access-error'; import NoAccessError from '../error/no-access-error';
import IncompatibleProjectError from '../error/incompatible-project-error'; import IncompatibleProjectError from '../error/incompatible-project-error';
import { DEFAULT_PROJECT } from '../types/project'; import { DEFAULT_PROJECT } from '../types/project';
import { IFeatureTagStore } from 'lib/types/stores/feature-tag-store';
const getCreatedBy = (user: User) => user.email || user.username; const getCreatedBy = (user: User) => user.email || user.username;
@ -63,6 +61,8 @@ export default class ProjectService {
private featureToggleService: FeatureToggleService; private featureToggleService: FeatureToggleService;
private tagStore: IFeatureTagStore;
constructor( constructor(
{ {
projectStore, projectStore,
@ -71,6 +71,7 @@ export default class ProjectService {
featureTypeStore, featureTypeStore,
environmentStore, environmentStore,
featureEnvironmentStore, featureEnvironmentStore,
featureTagStore,
}: Pick< }: Pick<
IUnleashStores, IUnleashStores,
| 'projectStore' | 'projectStore'
@ -79,6 +80,7 @@ export default class ProjectService {
| 'featureTypeStore' | 'featureTypeStore'
| 'environmentStore' | 'environmentStore'
| 'featureEnvironmentStore' | 'featureEnvironmentStore'
| 'featureTagStore'
>, >,
config: IUnleashConfig, config: IUnleashConfig,
accessService: AccessService, accessService: AccessService,
@ -92,6 +94,7 @@ export default class ProjectService {
this.featureToggleStore = featureToggleStore; this.featureToggleStore = featureToggleStore;
this.featureTypeStore = featureTypeStore; this.featureTypeStore = featureTypeStore;
this.featureToggleService = featureToggleService; this.featureToggleService = featureToggleService;
this.tagStore = featureTagStore;
this.logger = config.getLogger('services/project-service.js'); this.logger = config.getLogger('services/project-service.js');
} }
@ -224,6 +227,17 @@ export default class ProjectService {
newProjectId, 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; return updatedFeature;
} }