Delete unused objects (#7823)
Fixes #7113 --------- Co-authored-by: Weiko <corentin@twenty.com>
This commit is contained in:
@ -6,6 +6,7 @@ import {
|
||||
FindOptionsWhere,
|
||||
In,
|
||||
ObjectLiteral,
|
||||
Repository,
|
||||
} from 'typeorm';
|
||||
import { DeepPartial } from 'typeorm/common/DeepPartial';
|
||||
import { v4 as uuidV4 } from 'uuid';
|
||||
@ -127,6 +128,11 @@ export class WorkspaceMetadataUpdaterService {
|
||||
updatedFieldMetadataCollection: FieldMetadataUpdate[];
|
||||
}> {
|
||||
const fieldMetadataRepository = manager.getRepository(FieldMetadataEntity);
|
||||
const indexFieldMetadataRepository = manager.getRepository(
|
||||
IndexFieldMetadataEntity,
|
||||
);
|
||||
const indexMetadataRepository = manager.getRepository(IndexMetadataEntity);
|
||||
|
||||
/**
|
||||
* Update field metadata
|
||||
*/
|
||||
@ -157,6 +163,12 @@ export class WorkspaceMetadataUpdaterService {
|
||||
);
|
||||
|
||||
if (fieldMetadataDeleteCollectionWithoutRelationType.length > 0) {
|
||||
await this.deleteIndexFieldMetadata(
|
||||
fieldMetadataDeleteCollectionWithoutRelationType,
|
||||
indexFieldMetadataRepository,
|
||||
indexMetadataRepository,
|
||||
);
|
||||
|
||||
await fieldMetadataRepository.delete(
|
||||
fieldMetadataDeleteCollectionWithoutRelationType.map(
|
||||
(field) => field.id,
|
||||
@ -171,6 +183,33 @@ export class WorkspaceMetadataUpdaterService {
|
||||
};
|
||||
}
|
||||
|
||||
async deleteIndexFieldMetadata(
|
||||
fieldMetadataDeleteCollectionWithoutRelationType: Partial<FieldMetadataEntity>[],
|
||||
indexFieldMetadataRepository: Repository<IndexFieldMetadataEntity>,
|
||||
indexMetadataRepository: Repository<IndexMetadataEntity>,
|
||||
) {
|
||||
const indexFieldMetadatas = await indexFieldMetadataRepository.find({
|
||||
where: {
|
||||
fieldMetadataId: In(
|
||||
fieldMetadataDeleteCollectionWithoutRelationType.map(
|
||||
(field) => field.id,
|
||||
),
|
||||
),
|
||||
},
|
||||
relations: {
|
||||
indexMetadata: true,
|
||||
},
|
||||
});
|
||||
|
||||
const uniqueIndexMetadataIds = [
|
||||
...new Set(indexFieldMetadatas.map((field) => field.indexMetadataId)),
|
||||
];
|
||||
|
||||
if (uniqueIndexMetadataIds.length > 0) {
|
||||
await indexMetadataRepository.delete(uniqueIndexMetadataIds);
|
||||
}
|
||||
}
|
||||
|
||||
async updateRelationMetadata(
|
||||
manager: EntityManager,
|
||||
storage: WorkspaceSyncStorage,
|
||||
|
||||
@ -8,6 +8,7 @@ import { ComparatorAction } from 'src/engine/workspace-manager/workspace-sync-me
|
||||
import { WorkspaceSyncContext } from 'src/engine/workspace-manager/workspace-sync-metadata/interfaces/workspace-sync-context.interface';
|
||||
|
||||
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
|
||||
import { RelationMetadataEntity } from 'src/engine/metadata-modules/relation-metadata/relation-metadata.entity';
|
||||
import { WorkspaceMigrationEntity } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity';
|
||||
import { WorkspaceMigrationObjectFactory } from 'src/engine/workspace-manager/workspace-migration-builder/factories/workspace-migration-object.factory';
|
||||
import { WorkspaceObjectComparator } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/workspace-object.comparator';
|
||||
@ -37,6 +38,10 @@ export class WorkspaceSyncObjectMetadataService {
|
||||
const objectMetadataRepository =
|
||||
manager.getRepository(ObjectMetadataEntity);
|
||||
|
||||
const relationMetadataRepository = manager.getRepository(
|
||||
RelationMetadataEntity,
|
||||
);
|
||||
|
||||
// Retrieve object metadata collection from DB
|
||||
const originalObjectMetadataCollection =
|
||||
await objectMetadataRepository.find({
|
||||
@ -47,6 +52,33 @@ export class WorkspaceSyncObjectMetadataService {
|
||||
relations: ['dataSource', 'fields'],
|
||||
});
|
||||
|
||||
// Retrieve relation metadata collection from DB
|
||||
const originalRelationMetadataCollection =
|
||||
await relationMetadataRepository.find({
|
||||
where: {
|
||||
workspaceId: context.workspaceId,
|
||||
},
|
||||
relations: ['toObjectMetadata', 'toFieldMetadata'],
|
||||
});
|
||||
|
||||
const relationMetadataByFromObjectMetadataId: Record<
|
||||
string,
|
||||
RelationMetadataEntity[]
|
||||
> = originalRelationMetadataCollection.reduce(
|
||||
(acc, relationMetadata) => {
|
||||
const fromObjectMetadataId = relationMetadata.fromObjectMetadataId;
|
||||
|
||||
if (!acc[fromObjectMetadataId]) {
|
||||
acc[fromObjectMetadataId] = [];
|
||||
}
|
||||
|
||||
acc[fromObjectMetadataId].push(relationMetadata);
|
||||
|
||||
return acc;
|
||||
},
|
||||
{} as Record<string, RelationMetadataEntity[]>,
|
||||
);
|
||||
|
||||
// Create standard object metadata collection
|
||||
const standardObjectMetadataCollection = this.standardObjectFactory.create(
|
||||
standardObjectMetadataDefinitions,
|
||||
@ -129,6 +161,7 @@ export class WorkspaceSyncObjectMetadataService {
|
||||
await this.workspaceMigrationObjectFactory.create(
|
||||
storage.objectMetadataDeleteCollection,
|
||||
WorkspaceMigrationBuilderAction.DELETE,
|
||||
relationMetadataByFromObjectMetadataId,
|
||||
);
|
||||
|
||||
this.logger.log('Saving migrations');
|
||||
|
||||
Reference in New Issue
Block a user