ObjectMetadataServiceV2.deleteOne (#13871)

# Introduction
- Implementing the delete one for the new object metadata service v2.
- Handling relation fields and fields in the first place to finally
remove the object
- puting back updatedAt and createdAt in flat metadatas
- duplicate criteria addition for flat object
- removing datasource id from object metadata dto
This commit is contained in:
Paul Rastoin
2025-08-13 11:20:17 +02:00
committed by GitHub
parent 98e1a325a8
commit e8e81957a6
44 changed files with 863 additions and 473 deletions
@@ -1,6 +1,7 @@
import { Injectable } from '@nestjs/common';
import { t } from '@lingui/core/macro';
import { isDefined } from 'twenty-shared/utils';
import { FlatFieldMetadataValidatorService } from 'src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-validator.service';
import { FailedFlatFieldMetadataValidationExceptions } from 'src/engine/metadata-modules/flat-field-metadata/types/failed-flat-field-metadata-validation.type';
@@ -31,6 +32,60 @@ export class FlatObjectMetadataValidatorService {
private readonly flatFieldMetadataValidatorService: FlatFieldMetadataValidatorService,
) {}
public validateFlatObjectMetadataDeletion({
existingFlatObjectMetadataMaps,
objectMetadataToDeleteId,
}: {
existingFlatObjectMetadataMaps: FlatObjectMetadataMaps;
objectMetadataToDeleteId: string;
}) {
const errors: FailedFlatObjectMetadataValidationExceptions[] = [];
const flatObjectMetadataToDelete =
existingFlatObjectMetadataMaps.byId[objectMetadataToDeleteId];
if (!isDefined(flatObjectMetadataToDelete)) {
errors.push(
new ObjectMetadataException(
t`Object does not exist`,
ObjectMetadataExceptionCode.OBJECT_METADATA_NOT_FOUND,
),
);
} else {
if (flatObjectMetadataToDelete.isRemote) {
errors.push(
new ObjectMetadataException(
t`Remote objects are not supported yet`,
ObjectMetadataExceptionCode.INVALID_OBJECT_INPUT,
),
);
}
if (
flatObjectMetadataToDelete.standardId !== null &&
!flatObjectMetadataToDelete.isCustom
) {
errors.push(
new ObjectMetadataException(
t`Standard objects cannot be deleted`,
ObjectMetadataExceptionCode.INVALID_OBJECT_INPUT,
),
);
}
if (flatObjectMetadataToDelete.isActive) {
errors.push(
new ObjectMetadataException(
t`Active objects cannot be deleted`,
ObjectMetadataExceptionCode.INVALID_OBJECT_INPUT,
),
);
}
}
return errors;
}
public async validateFlatObjectMetadataCreation({
existingFlatObjectMetadataMaps,
flatObjectMetadataToValidate,