feat: add deletion support on sync metadata command (#3826)
* feat: add deletion support on sync metadata command * fix: remove debug
This commit is contained in:
@ -162,6 +162,7 @@ export class WorkspaceMetadataUpdaterService {
|
||||
const relationMetadataRepository = manager.getRepository(
|
||||
RelationMetadataEntity,
|
||||
);
|
||||
const fieldMetadataRepository = manager.getRepository(FieldMetadataEntity);
|
||||
|
||||
/**
|
||||
* Create relation metadata
|
||||
@ -182,6 +183,20 @@ export class WorkspaceMetadataUpdaterService {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete related field metadata
|
||||
*/
|
||||
const fieldMetadataDeleteCollectionOnlyRelation =
|
||||
storage.fieldMetadataDeleteCollection.filter(
|
||||
(field) => field.type === FieldMetadataType.RELATION,
|
||||
);
|
||||
|
||||
if (fieldMetadataDeleteCollectionOnlyRelation.length > 0) {
|
||||
await fieldMetadataRepository.delete(
|
||||
fieldMetadataDeleteCollectionOnlyRelation.map((field) => field.id),
|
||||
);
|
||||
}
|
||||
|
||||
return {
|
||||
createdRelationMetadataCollection,
|
||||
};
|
||||
|
||||
@ -13,8 +13,9 @@ import { StandardObjectFactory } from 'src/workspace/workspace-sync-metadata/fac
|
||||
import { WorkspaceObjectComparator } from 'src/workspace/workspace-sync-metadata/comparators/workspace-object.comparator';
|
||||
import { WorkspaceFieldComparator } from 'src/workspace/workspace-sync-metadata/comparators/workspace-field.comparator';
|
||||
import { WorkspaceMetadataUpdaterService } from 'src/workspace/workspace-sync-metadata/services/workspace-metadata-updater.service';
|
||||
import { WorkspaceSyncFactory } from 'src/workspace/workspace-sync-metadata/factories/workspace-sync.factory';
|
||||
import { WorkspaceSyncStorage } from 'src/workspace/workspace-sync-metadata/storage/workspace-sync.storage';
|
||||
import { ObjectWorkspaceMigrationFactory } from 'src/workspace/workspace-sync-metadata/factories/object-workspace-migration.factory';
|
||||
import { FieldWorkspaceMigrationFactory } from 'src/workspace/workspace-sync-metadata/factories/field-workspace-migration.factory';
|
||||
|
||||
@Injectable()
|
||||
export class WorkspaceSyncObjectMetadataService {
|
||||
@ -25,7 +26,8 @@ export class WorkspaceSyncObjectMetadataService {
|
||||
private readonly workspaceObjectComparator: WorkspaceObjectComparator,
|
||||
private readonly workspaceFieldComparator: WorkspaceFieldComparator,
|
||||
private readonly workspaceMetadataUpdaterService: WorkspaceMetadataUpdaterService,
|
||||
private readonly workspaceSyncFactory: WorkspaceSyncFactory,
|
||||
private readonly objectWorkspaceMigrationFactory: ObjectWorkspaceMigrationFactory,
|
||||
private readonly fieldWorkspaceMigrationFactory: FieldWorkspaceMigrationFactory,
|
||||
) {}
|
||||
|
||||
async synchronize(
|
||||
@ -33,12 +35,9 @@ export class WorkspaceSyncObjectMetadataService {
|
||||
manager: EntityManager,
|
||||
storage: WorkspaceSyncStorage,
|
||||
workspaceFeatureFlagsMap: FeatureFlagMap,
|
||||
): Promise<WorkspaceMigrationEntity[]> {
|
||||
): Promise<Partial<WorkspaceMigrationEntity>[]> {
|
||||
const objectMetadataRepository =
|
||||
manager.getRepository(ObjectMetadataEntity);
|
||||
const workspaceMigrationRepository = manager.getRepository(
|
||||
WorkspaceMigrationEntity,
|
||||
);
|
||||
|
||||
// Retrieve object metadata collection from DB
|
||||
const originalObjectMetadataCollection =
|
||||
@ -141,22 +140,21 @@ export class WorkspaceSyncObjectMetadataService {
|
||||
this.logger.log('Generating migrations');
|
||||
|
||||
// Create migrations
|
||||
const workspaceObjectMigrations =
|
||||
await this.workspaceSyncFactory.createObjectMigration(
|
||||
originalObjectMetadataCollection,
|
||||
const objectWorkspaceMigrations =
|
||||
await this.objectWorkspaceMigrationFactory.create(
|
||||
metadataObjectUpdaterResult.createdObjectMetadataCollection,
|
||||
storage.objectMetadataDeleteCollection,
|
||||
);
|
||||
|
||||
const fieldWorkspaceMigrations =
|
||||
await this.fieldWorkspaceMigrationFactory.create(
|
||||
originalObjectMetadataCollection,
|
||||
metadataFieldUpdaterResult.createdFieldMetadataCollection,
|
||||
storage.fieldMetadataDeleteCollection,
|
||||
);
|
||||
|
||||
this.logger.log('Saving migrations');
|
||||
|
||||
// Save migrations into DB
|
||||
const workspaceMigrations = await workspaceMigrationRepository.save(
|
||||
workspaceObjectMigrations,
|
||||
);
|
||||
|
||||
return workspaceMigrations;
|
||||
return [...objectWorkspaceMigrations, ...fieldWorkspaceMigrations];
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,9 +12,9 @@ import { mapObjectMetadataByUniqueIdentifier } from 'src/workspace/workspace-syn
|
||||
import { StandardRelationFactory } from 'src/workspace/workspace-sync-metadata/factories/standard-relation.factory';
|
||||
import { WorkspaceRelationComparator } from 'src/workspace/workspace-sync-metadata/comparators/workspace-relation.comparator';
|
||||
import { WorkspaceMetadataUpdaterService } from 'src/workspace/workspace-sync-metadata/services/workspace-metadata-updater.service';
|
||||
import { WorkspaceSyncFactory } from 'src/workspace/workspace-sync-metadata/factories/workspace-sync.factory';
|
||||
import { WorkspaceMigrationEntity } from 'src/metadata/workspace-migration/workspace-migration.entity';
|
||||
import { WorkspaceSyncStorage } from 'src/workspace/workspace-sync-metadata/storage/workspace-sync.storage';
|
||||
import { RelationWorkspaceMigrationFactory } from 'src/workspace/workspace-sync-metadata/factories/relation-workspace-migration.factory';
|
||||
|
||||
@Injectable()
|
||||
export class WorkspaceSyncRelationMetadataService {
|
||||
@ -26,7 +26,7 @@ export class WorkspaceSyncRelationMetadataService {
|
||||
private readonly standardRelationFactory: StandardRelationFactory,
|
||||
private readonly workspaceRelationComparator: WorkspaceRelationComparator,
|
||||
private readonly workspaceMetadataUpdaterService: WorkspaceMetadataUpdaterService,
|
||||
private readonly workspaceSyncFactory: WorkspaceSyncFactory,
|
||||
private readonly relationWorkspaceMigrationFactory: RelationWorkspaceMigrationFactory,
|
||||
) {}
|
||||
|
||||
async synchronize(
|
||||
@ -34,12 +34,9 @@ export class WorkspaceSyncRelationMetadataService {
|
||||
manager: EntityManager,
|
||||
storage: WorkspaceSyncStorage,
|
||||
workspaceFeatureFlagsMap: FeatureFlagMap,
|
||||
): Promise<WorkspaceMigrationEntity[]> {
|
||||
): Promise<Partial<WorkspaceMigrationEntity>[]> {
|
||||
const objectMetadataRepository =
|
||||
manager.getRepository(ObjectMetadataEntity);
|
||||
const workspaceMigrationRepository = manager.getRepository(
|
||||
WorkspaceMigrationEntity,
|
||||
);
|
||||
|
||||
// Retrieve object metadata collection from DB
|
||||
const originalObjectMetadataCollection =
|
||||
@ -99,17 +96,11 @@ export class WorkspaceSyncRelationMetadataService {
|
||||
|
||||
// Create migrations
|
||||
const workspaceRelationMigrations =
|
||||
await this.workspaceSyncFactory.createRelationMigration(
|
||||
await this.relationWorkspaceMigrationFactory.create(
|
||||
originalObjectMetadataCollection,
|
||||
metadataRelationUpdaterResult.createdRelationMetadataCollection,
|
||||
storage.relationMetadataDeleteCollection,
|
||||
);
|
||||
|
||||
// Save migrations into DB
|
||||
const workspaceMigrations = await workspaceMigrationRepository.save(
|
||||
workspaceRelationMigrations,
|
||||
);
|
||||
|
||||
return workspaceMigrations;
|
||||
return workspaceRelationMigrations;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user