[Fix] isLabelSyncedWithName should be nullable (#9028)

isLabelSyncedWithName should be nullable for fieldMetadata, as it is for
objectMetadata.

+ Adding missing validation on label and name sync in
fieldMetadataService for creation and update
+ adding metadata tests
This commit is contained in:
Marie
2024-12-12 18:25:40 +01:00
committed by GitHub
parent 2990d23411
commit d56c815897
19 changed files with 422 additions and 12 deletions

View File

@ -147,7 +147,7 @@ export class FieldMetadataDTO<
@IsBoolean()
@IsOptional()
@Field()
@Field({ nullable: true })
isLabelSyncedWithName?: boolean;
@IsDateString()

View File

@ -32,6 +32,7 @@ import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-
import { isSelectFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-select-field-metadata-type.util';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { assertMutationNotOnRemoteObject } from 'src/engine/metadata-modules/object-metadata/utils/assert-mutation-not-on-remote-object.util';
import { validateNameAndLabelAreSyncOrThrow } from 'src/engine/metadata-modules/object-metadata/utils/validate-object-metadata-input.util';
import {
RelationMetadataEntity,
RelationMetadataType,
@ -175,6 +176,13 @@ export class FieldMetadataService extends TypeOrmQueryService<FieldMetadataEntit
objectMetadata,
);
if (fieldMetadataForCreate.isLabelSyncedWithName === true) {
validateNameAndLabelAreSyncOrThrow(
fieldMetadataForCreate.label,
fieldMetadataForCreate.name,
);
}
console.time('createOne save');
const createdFieldMetadata = await fieldMetadataRepository.save(
fieldMetadataForCreate,
@ -407,6 +415,17 @@ export class FieldMetadataService extends TypeOrmQueryService<FieldMetadataEntit
objectMetadata,
);
const isLabelSyncedWithName =
fieldMetadataForUpdate.isLabelSyncedWithName ??
existingFieldMetadata.isLabelSyncedWithName;
if (isLabelSyncedWithName) {
validateNameAndLabelAreSyncOrThrow(
fieldMetadataForUpdate.label ?? existingFieldMetadata.label,
fieldMetadataForUpdate.name ?? existingFieldMetadata.name,
);
}
// We're running field update under a transaction, so we can rollback if migration fails
await fieldMetadataRepository.update(id, fieldMetadataForUpdate);