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:
+7
-2
@@ -9,10 +9,10 @@ import { type CreateObjectInput } from 'src/engine/metadata-modules/object-metad
|
||||
import { buildDefaultFlatFieldMetadataForCustomObject } from 'src/engine/metadata-modules/object-metadata/utils/build-default-fields-for-custom-object.util';
|
||||
|
||||
export const fromCreateObjectInputToFlatObjectMetadata = ({
|
||||
objectMetadataInput: rawCreateObjectInput,
|
||||
createObjectInput: rawCreateObjectInput,
|
||||
workspaceId,
|
||||
}: {
|
||||
objectMetadataInput: Omit<CreateObjectInput, 'workspaceId'>;
|
||||
createObjectInput: Omit<CreateObjectInput, 'workspaceId'>;
|
||||
workspaceId: string;
|
||||
}): FlatObjectMetadata => {
|
||||
const createObjectInput =
|
||||
@@ -36,7 +36,12 @@ export const fromCreateObjectInputToFlatObjectMetadata = ({
|
||||
workspaceId,
|
||||
});
|
||||
|
||||
const createdAt = new Date();
|
||||
|
||||
return {
|
||||
createdAt,
|
||||
updatedAt: createdAt,
|
||||
duplicateCriteria: null,
|
||||
description: createObjectInput.description ?? null,
|
||||
flatFieldMetadatas: Object.values(baseCustomFlatFieldMetadatas),
|
||||
flatIndexMetadatas: [],
|
||||
|
||||
+75
@@ -0,0 +1,75 @@
|
||||
import { FieldMetadataType } from 'twenty-shared/types';
|
||||
import {
|
||||
isDefined,
|
||||
trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties,
|
||||
} from 'twenty-shared/utils';
|
||||
|
||||
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 { findFlatObjectMetadataInFlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/find-flat-object-metadata-in-flat-object-metadata-maps.util';
|
||||
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
|
||||
import { type DeleteOneObjectInput } from 'src/engine/metadata-modules/object-metadata/dtos/delete-object.input';
|
||||
import {
|
||||
ObjectMetadataException,
|
||||
ObjectMetadataExceptionCode,
|
||||
} from 'src/engine/metadata-modules/object-metadata/object-metadata.exception';
|
||||
|
||||
export const fromDeleteObjectInputToFlatFieldMetadatasToDelete = ({
|
||||
deleteObjectInput: rawDeleteObjectInput,
|
||||
existingFlatObjectMetadataMaps,
|
||||
}: {
|
||||
deleteObjectInput: DeleteOneObjectInput;
|
||||
existingFlatObjectMetadataMaps: FlatObjectMetadataMaps;
|
||||
}): {
|
||||
flatFieldMetadatasToDelete: FlatFieldMetadata[];
|
||||
flatObjectMetadataToDelete: FlatObjectMetadata;
|
||||
} => {
|
||||
const { id: objectMetadataToDeleteId } =
|
||||
trimAndRemoveDuplicatedWhitespacesFromObjectStringProperties(
|
||||
rawDeleteObjectInput,
|
||||
['id'],
|
||||
);
|
||||
|
||||
const flatObjectMetadataToDelete =
|
||||
findFlatObjectMetadataInFlatObjectMetadataMaps({
|
||||
flatObjectMetadataMaps: existingFlatObjectMetadataMaps,
|
||||
objectMetadataId: objectMetadataToDeleteId,
|
||||
});
|
||||
|
||||
if (!isDefined(flatObjectMetadataToDelete)) {
|
||||
throw new ObjectMetadataException(
|
||||
'Object to delete not found',
|
||||
ObjectMetadataExceptionCode.OBJECT_METADATA_NOT_FOUND,
|
||||
);
|
||||
}
|
||||
|
||||
const flatFieldMetadatasToDelete =
|
||||
flatObjectMetadataToDelete.flatFieldMetadatas.flatMap(
|
||||
(flatFieldMetadata) => {
|
||||
if (
|
||||
isFlatFieldMetadataEntityOfType(
|
||||
flatFieldMetadata,
|
||||
FieldMetadataType.RELATION,
|
||||
) ||
|
||||
isFlatFieldMetadataEntityOfType(
|
||||
flatFieldMetadata,
|
||||
FieldMetadataType.MORPH_RELATION,
|
||||
)
|
||||
) {
|
||||
return getRelationFlatFieldMetadatasOrThrow({
|
||||
existingFlatObjectMetadataMaps,
|
||||
flatFieldMetadata,
|
||||
});
|
||||
}
|
||||
|
||||
return flatFieldMetadata;
|
||||
},
|
||||
);
|
||||
|
||||
return {
|
||||
flatFieldMetadatasToDelete,
|
||||
flatObjectMetadataToDelete,
|
||||
};
|
||||
};
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
|
||||
import { type ObjectMetadataDTO } from 'src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto';
|
||||
|
||||
export const fromFlatObjectMetadataToObjectMetadataDto = (
|
||||
flatObjectMetadata: FlatObjectMetadata,
|
||||
): ObjectMetadataDTO => {
|
||||
const {
|
||||
createdAt,
|
||||
updatedAt,
|
||||
description,
|
||||
icon,
|
||||
standardOverrides,
|
||||
shortcut,
|
||||
duplicateCriteria,
|
||||
...rest
|
||||
} = flatObjectMetadata;
|
||||
|
||||
return {
|
||||
...rest,
|
||||
createdAt: new Date(createdAt),
|
||||
updatedAt: new Date(updatedAt),
|
||||
description: description ?? undefined,
|
||||
icon: icon ?? undefined,
|
||||
standardOverrides: standardOverrides ?? undefined,
|
||||
shortcut: shortcut ?? undefined,
|
||||
duplicateCriteria: duplicateCriteria ?? undefined,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user