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:
Jérémy M
2024-02-07 15:38:23 +01:00
committed by GitHub
parent b119dd8e9c
commit a908353955
13 changed files with 421 additions and 311 deletions

View File

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

View File

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

View File

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