From b6b7d0e66519920a9183aaae7e1b0b8ae776cf11 Mon Sep 17 00:00:00 2001 From: Marie <51697796+ijreilly@users.noreply.github.com> Date: Thu, 10 Oct 2024 09:38:29 +0200 Subject: [PATCH] Fix field creation (#7547) In [this](https://github.com/twentyhq/twenty/pull/7522) and [this](https://github.com/twentyhq/twenty/pull/7543) PR we introduced the impossibility to save a field that would be non nullable but without a default value. The check is actually called on the input while the defaultValue is added by the service on a "built" fieldMetadata to create or save. So far all fields created from the app it currently fails as both isNullable and defaultValue are undefined so falsy at that stage. --- .../field-metadata/field-metadata.service.ts | 62 +++++++++---------- 1 file changed, 29 insertions(+), 33 deletions(-) diff --git a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.service.ts b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.service.ts index 8ea3b656d..ae56a6d3a 100644 --- a/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/field-metadata/field-metadata.service.ts @@ -159,14 +159,7 @@ export class FieldMetadataService extends TypeOrmQueryService( - fieldMetadataInput.type, - fieldMetadataInput, - objectMetadata, - ); - - console.time('createOne save'); - const createdFieldMetadata = await fieldMetadataRepository.save({ + const fieldMetadataForCreate = { id: v4(), createdAt: new Date(), updatedAt: new Date(), @@ -187,7 +180,18 @@ export class FieldMetadataService extends TypeOrmQueryService( + fieldMetadataForCreate.type, + fieldMetadataForCreate, + objectMetadata, + ); + + console.time('createOne save'); + const createdFieldMetadata = await fieldMetadataRepository.save( + fieldMetadataForCreate, + ); console.timeEnd('createOne save'); @@ -394,12 +398,6 @@ export class FieldMetadataService extends TypeOrmQueryService( - existingFieldMetadata.type, - fieldMetadataInput, - objectMetadata, - ); - const updatableFieldInput = existingFieldMetadata.isCustom === false ? this.buildUpdatableStandardFieldInput( @@ -408,21 +406,21 @@ export class FieldMetadataService extends TypeOrmQueryService( + existingFieldMetadata.type, + fieldMetadataForUpdate, + objectMetadata, + ); + + // We're running field update under a transaction, so we can rollback if migration fails + await fieldMetadataRepository.update(id, fieldMetadataForUpdate); const updatedFieldMetadata = await fieldMetadataRepository.findOne({ where: { id }, @@ -710,9 +708,7 @@ export class FieldMetadataService extends TypeOrmQueryService( + private validateFieldMetadata( fieldMetadataType: FieldMetadataType, fieldMetadataInput: T, objectMetadata: ObjectMetadataEntity, @@ -746,7 +742,7 @@ export class FieldMetadataService extends TypeOrmQueryService