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:
+6
-30
@@ -10,6 +10,7 @@ import {
|
||||
FieldMetadataExceptionCode,
|
||||
} from 'src/engine/metadata-modules/field-metadata/field-metadata.exception';
|
||||
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||
import { getRelationFlatFieldMetadatasOrThrow } from 'src/engine/metadata-modules/flat-field-metadata/utils/get-relation-flat-field-metadatas-or-throw.util';
|
||||
import { isFlatFieldMetadataEntityOfType } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-type.util';
|
||||
import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type';
|
||||
import { findFlatFieldMetadataInFlatObjectMetadataMapsWithOnlyFieldId } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/find-flat-field-metadata-in-flat-object-metadata-maps-with-field-id-only.util';
|
||||
@@ -45,41 +46,16 @@ export const fromDeleteFieldInputToFlatFieldMetadatasToDelete = ({
|
||||
isFlatFieldMetadataEntityOfType(
|
||||
flatFieldMetadataToDelete,
|
||||
FieldMetadataType.RELATION,
|
||||
)
|
||||
) {
|
||||
const { relationTargetFieldMetadataId, relationTargetObjectMetadataId } =
|
||||
flatFieldMetadataToDelete;
|
||||
|
||||
const relatedFlatObjectMetadata =
|
||||
existingFlatObjectMetadataMaps.byId[relationTargetObjectMetadataId];
|
||||
|
||||
if (!isDefined(relatedFlatObjectMetadata)) {
|
||||
throw new FieldMetadataException(
|
||||
`Deleted field metadata relation object metadata target not found`,
|
||||
FieldMetadataExceptionCode.OBJECT_METADATA_NOT_FOUND,
|
||||
);
|
||||
}
|
||||
const relatedFlatFieldMetadata =
|
||||
relatedFlatObjectMetadata.fieldsById[relationTargetFieldMetadataId];
|
||||
|
||||
if (!isDefined(relatedFlatFieldMetadata)) {
|
||||
throw new FieldMetadataException(
|
||||
`Deleted field metadata relation field metadata target not found`,
|
||||
FieldMetadataExceptionCode.FIELD_METADATA_NOT_FOUND,
|
||||
);
|
||||
}
|
||||
|
||||
return [flatFieldMetadataToDelete, relatedFlatFieldMetadata];
|
||||
}
|
||||
|
||||
if (
|
||||
) ||
|
||||
isFlatFieldMetadataEntityOfType(
|
||||
flatFieldMetadataToDelete,
|
||||
FieldMetadataType.MORPH_RELATION,
|
||||
)
|
||||
) {
|
||||
// TODO prastoin
|
||||
return [flatFieldMetadataToDelete];
|
||||
return getRelationFlatFieldMetadatasOrThrow({
|
||||
existingFlatObjectMetadataMaps,
|
||||
flatFieldMetadata: flatFieldMetadataToDelete,
|
||||
});
|
||||
}
|
||||
|
||||
return [flatFieldMetadataToDelete];
|
||||
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
import { type FieldMetadataDTO } from 'src/engine/metadata-modules/field-metadata/dtos/field-metadata.dto';
|
||||
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||
|
||||
export const fromFlatFieldMetadataToFieldMetadataDto = (
|
||||
flatFieldMetadata: FlatFieldMetadata,
|
||||
): FieldMetadataDTO => {
|
||||
const {
|
||||
createdAt,
|
||||
updatedAt,
|
||||
description,
|
||||
icon,
|
||||
standardOverrides,
|
||||
isNullable,
|
||||
isUnique,
|
||||
settings,
|
||||
...rest
|
||||
} = flatFieldMetadata;
|
||||
|
||||
return {
|
||||
...rest,
|
||||
createdAt: new Date(createdAt),
|
||||
updatedAt: new Date(updatedAt),
|
||||
description: description ?? undefined,
|
||||
icon: icon ?? undefined,
|
||||
standardOverrides: standardOverrides ?? undefined,
|
||||
isNullable: isNullable ?? false,
|
||||
isUnique: isUnique ?? false,
|
||||
settings: settings ?? undefined,
|
||||
};
|
||||
};
|
||||
+4
@@ -19,6 +19,8 @@ export const getDefaultFlatFieldMetadata = ({
|
||||
['defaultValue', 'settings'],
|
||||
);
|
||||
|
||||
const createdAt = new Date();
|
||||
|
||||
return {
|
||||
description: createFieldInput.description ?? null,
|
||||
id: fieldMetadataId,
|
||||
@@ -48,5 +50,7 @@ export const getDefaultFlatFieldMetadata = ({
|
||||
options: null,
|
||||
defaultValue: defaultValue ?? null,
|
||||
settings: settings ?? null,
|
||||
createdAt,
|
||||
updatedAt: createdAt,
|
||||
} as const satisfies FlatFieldMetadata;
|
||||
};
|
||||
|
||||
+45
@@ -0,0 +1,45 @@
|
||||
import { type FieldMetadataType } from 'twenty-shared/types';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import {
|
||||
FieldMetadataException,
|
||||
FieldMetadataExceptionCode,
|
||||
} from 'src/engine/metadata-modules/field-metadata/field-metadata.exception';
|
||||
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||
import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type';
|
||||
|
||||
type GetRelationFlatFieldMetadatasUtilArgs = {
|
||||
existingFlatObjectMetadataMaps: FlatObjectMetadataMaps;
|
||||
flatFieldMetadata: FlatFieldMetadata<
|
||||
FieldMetadataType.RELATION | FieldMetadataType.MORPH_RELATION
|
||||
>;
|
||||
};
|
||||
// TODO prastoin handle morph relation
|
||||
export const getRelationFlatFieldMetadatasOrThrow = ({
|
||||
existingFlatObjectMetadataMaps,
|
||||
flatFieldMetadata,
|
||||
}: GetRelationFlatFieldMetadatasUtilArgs): FlatFieldMetadata[] => {
|
||||
const { relationTargetFieldMetadataId, relationTargetObjectMetadataId } =
|
||||
flatFieldMetadata;
|
||||
|
||||
const relatedFlatObjectMetadata =
|
||||
existingFlatObjectMetadataMaps.byId[relationTargetObjectMetadataId];
|
||||
|
||||
if (!isDefined(relatedFlatObjectMetadata)) {
|
||||
throw new FieldMetadataException(
|
||||
`Deleted field metadata relation object metadata target not found`,
|
||||
FieldMetadataExceptionCode.OBJECT_METADATA_NOT_FOUND,
|
||||
);
|
||||
}
|
||||
const relatedFlatFieldMetadata =
|
||||
relatedFlatObjectMetadata.fieldsById[relationTargetFieldMetadataId];
|
||||
|
||||
if (!isDefined(relatedFlatFieldMetadata)) {
|
||||
throw new FieldMetadataException(
|
||||
`Deleted field metadata relation field metadata target not found`,
|
||||
FieldMetadataExceptionCode.FIELD_METADATA_NOT_FOUND,
|
||||
);
|
||||
}
|
||||
|
||||
return [flatFieldMetadata, relatedFlatFieldMetadata];
|
||||
};
|
||||
Reference in New Issue
Block a user