Feat/workspace health core fix (#3863)

* feat: add deletion support on sync metadata command

* fix: remove debug

* feat: wip workspace health command add --fix option

fix: remove test

* feat: core of --fix option for workspace-health
This commit is contained in:
Jérémy M
2024-02-07 18:27:35 +01:00
committed by GitHub
parent 850eab8f8f
commit 6e3a8e3461
20 changed files with 380 additions and 103 deletions

View File

@ -5,6 +5,7 @@ import { EntityManager } from 'typeorm';
import { WorkspaceSyncContext } from 'src/workspace/workspace-sync-metadata/interfaces/workspace-sync-context.interface';
import { ComparatorAction } from 'src/workspace/workspace-sync-metadata/interfaces/comparator.interface';
import { FeatureFlagMap } from 'src/core/feature-flag/interfaces/feature-flag-map.interface';
import { WorkspaceMigrationBuilderAction } from 'src/workspace/workspace-migration-builder/interfaces/workspace-migration-builder-action.interface';
import { ObjectMetadataEntity } from 'src/metadata/object-metadata/object-metadata.entity';
import { mapObjectMetadataByUniqueIdentifier } from 'src/workspace/workspace-sync-metadata/utils/sync-metadata.util';
@ -14,8 +15,8 @@ import { WorkspaceObjectComparator } from 'src/workspace/workspace-sync-metadata
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 { 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';
import { WorkspaceMigrationObjectFactory } from 'src/workspace/workspace-migration-builder/factories/workspace-migration-object.factory';
import { WorkspaceMigrationFieldFactory } from 'src/workspace/workspace-migration-builder/factories/workspace-migration-field.factory';
@Injectable()
export class WorkspaceSyncObjectMetadataService {
@ -26,8 +27,8 @@ export class WorkspaceSyncObjectMetadataService {
private readonly workspaceObjectComparator: WorkspaceObjectComparator,
private readonly workspaceFieldComparator: WorkspaceFieldComparator,
private readonly workspaceMetadataUpdaterService: WorkspaceMetadataUpdaterService,
private readonly objectWorkspaceMigrationFactory: ObjectWorkspaceMigrationFactory,
private readonly fieldWorkspaceMigrationFactory: FieldWorkspaceMigrationFactory,
private readonly workspaceMigrationObjectFactory: WorkspaceMigrationObjectFactory,
private readonly workspaceMigrationFieldFactory: WorkspaceMigrationFieldFactory,
) {}
async synchronize(
@ -140,21 +141,39 @@ export class WorkspaceSyncObjectMetadataService {
this.logger.log('Generating migrations');
// Create migrations
const objectWorkspaceMigrations =
await this.objectWorkspaceMigrationFactory.create(
const createObjectWorkspaceMigrations =
await this.workspaceMigrationObjectFactory.create(
metadataObjectUpdaterResult.createdObjectMetadataCollection,
storage.objectMetadataDeleteCollection,
WorkspaceMigrationBuilderAction.CREATE,
);
const fieldWorkspaceMigrations =
await this.fieldWorkspaceMigrationFactory.create(
const deleteObjectWorkspaceMigrations =
await this.workspaceMigrationObjectFactory.create(
storage.objectMetadataDeleteCollection,
WorkspaceMigrationBuilderAction.DELETE,
);
const createFieldWorkspaceMigrations =
await this.workspaceMigrationFieldFactory.create(
originalObjectMetadataCollection,
metadataFieldUpdaterResult.createdFieldMetadataCollection,
WorkspaceMigrationBuilderAction.CREATE,
);
const deleteFieldWorkspaceMigrations =
await this.workspaceMigrationFieldFactory.create(
originalObjectMetadataCollection,
storage.fieldMetadataDeleteCollection,
WorkspaceMigrationBuilderAction.DELETE,
);
this.logger.log('Saving migrations');
return [...objectWorkspaceMigrations, ...fieldWorkspaceMigrations];
return [
...createObjectWorkspaceMigrations,
...deleteObjectWorkspaceMigrations,
...createFieldWorkspaceMigrations,
...deleteFieldWorkspaceMigrations,
];
}
}

View File

@ -5,6 +5,7 @@ import { EntityManager } from 'typeorm';
import { WorkspaceSyncContext } from 'src/workspace/workspace-sync-metadata/interfaces/workspace-sync-context.interface';
import { FeatureFlagMap } from 'src/core/feature-flag/interfaces/feature-flag-map.interface';
import { ComparatorAction } from 'src/workspace/workspace-sync-metadata/interfaces/comparator.interface';
import { WorkspaceMigrationBuilderAction } from 'src/workspace/workspace-migration-builder/interfaces/workspace-migration-builder-action.interface';
import { ObjectMetadataEntity } from 'src/metadata/object-metadata/object-metadata.entity';
import { RelationMetadataEntity } from 'src/metadata/relation-metadata/relation-metadata.entity';
@ -14,7 +15,7 @@ import { WorkspaceRelationComparator } from 'src/workspace/workspace-sync-metada
import { WorkspaceMetadataUpdaterService } from 'src/workspace/workspace-sync-metadata/services/workspace-metadata-updater.service';
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';
import { WorkspaceMigrationRelationFactory } from 'src/workspace/workspace-migration-builder/factories/workspace-migration-relation.factory';
@Injectable()
export class WorkspaceSyncRelationMetadataService {
@ -26,7 +27,7 @@ export class WorkspaceSyncRelationMetadataService {
private readonly standardRelationFactory: StandardRelationFactory,
private readonly workspaceRelationComparator: WorkspaceRelationComparator,
private readonly workspaceMetadataUpdaterService: WorkspaceMetadataUpdaterService,
private readonly relationWorkspaceMigrationFactory: RelationWorkspaceMigrationFactory,
private readonly workspaceMigrationRelationFactory: WorkspaceMigrationRelationFactory,
) {}
async synchronize(
@ -95,12 +96,13 @@ export class WorkspaceSyncRelationMetadataService {
);
// Create migrations
const workspaceRelationMigrations =
await this.relationWorkspaceMigrationFactory.create(
const createRelationWorkspaceMigrations =
await this.workspaceMigrationRelationFactory.create(
originalObjectMetadataCollection,
metadataRelationUpdaterResult.createdRelationMetadataCollection,
WorkspaceMigrationBuilderAction.CREATE,
);
return workspaceRelationMigrations;
return createRelationWorkspaceMigrations;
}
}