Transform record phone field metadata (#12706)
# Introduction close https://github.com/twentyhq/twenty/issues/12343 Adding a transform step for any field phone in order to infer country code and calling code from the number if they're provided ## Edges cases ```ts RecordTransformerExceptionCode.INVALID_PHONE_NUMBER: RecordTransformerExceptionCode.INVALID_PHONE_COUNTRY_CODE: RecordTransformerExceptionCode.CONFLICTING_PHONE_COUNTRY_CODE: RecordTransformerExceptionCode.CONFLICTING_PHONE_CALLING_CODE: RecordTransformerExceptionCode.CONFLICTING_PHONE_CALLING_CODE_AND_COUNTRY_CODE: RecordTransformerExceptionCode.INVALID_PHONE_CALLING_CODE: RecordTransformerExceptionCode.INVALID_URL: ``` ## Coverage Note: Will handle REST api integration testing pivot and UPDATE operation later in the afternoon, critical bug appeared that I prefer handling before improving this PR coverage, also would be too many updates Note2: Haven't fuzzed all of the string inputs, would seem overkill for such a use case, to be debated ```ts PASS test/integration/metadata/suites/field-metadata/phone/create-one-field-metadata-phone.integration-spec.ts (23.609 s) Phone field metadata tests suite ✓ It should succeed create primary phone field (1397 ms) ✓ It should succeed create primary phone field with number and other information (930 ms) ✓ It should succeed create primary phone field with full international format and other information (893 ms) ✓ It should succeed create primary phone field with full international and infer other information from it but not the countryCode as its shared (825 ms) ✓ It should succeed create primary phone field with full international and infer other information from it (818 ms) ✓ It should succeed create primary phone field with empty payload (827 ms) ✓ It should succeed create additional phone field with number and other information (894 ms) ✓ It should succeed create additional phone field with full international format and other information (1024 ms) ✓ It should succeed create additional phone field with full international and infer other information from it but not the countryCode as its shared (808 ms) ✓ It should succeed create additional phone field with full international and infer other information from it (751 ms) ✓ It should succeed create additional phone field with empty payload (739 ms) ✓ It should fail to create primary phone field without country or calling code at all (776 ms) ✓ It should fail to create primary phone field with invalid country code (782 ms) ✓ It should fail to create primary phone field with invalid calling code (858 ms) ✓ It should fail to create primary phone field with conflicting country code and calling code (872 ms) ✓ It should fail to create primary phone field with invalid phone number format (1489 ms) ✓ It should fail to create primary phone field with conflicting phone number country code (1425 ms) ✓ It should fail to create primary phone field with conflicting phone number calling code (1553 ms) ✓ It should fail to create primary phone field without country or calling code at all (814 ms) ✓ It should fail to create primary phone field with invalid country code (813 ms) ✓ It should fail to create primary phone field with invalid calling code (742 ms) ✓ It should fail to create primary phone field with conflicting country code and calling code (783 ms) ✓ It should fail to create primary phone field with invalid phone number format (731 ms) ✓ It should fail to create primary phone field with conflicting phone number country code (947 ms) ✓ It should fail to create primary phone field with conflicting phone number calling code (822 ms) Test Suites: 1 passed, 1 total Tests: 25 passed, 25 total Snapshots: 14 passed, 14 total Time: 23.627 s ```
This commit is contained in:
@ -1,6 +1,7 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
import { FieldMetadataType } from 'twenty-shared/types';
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import {
|
||||
ObjectRecord,
|
||||
@ -21,9 +22,9 @@ import {
|
||||
import { FieldMetadataInterface } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata.interface';
|
||||
|
||||
import { RecordPositionService } from 'src/engine/core-modules/record-position/services/record-position.service';
|
||||
import { FieldMetadataMap } from 'src/engine/metadata-modules/types/field-metadata-map';
|
||||
import { RecordInputTransformerService } from 'src/engine/core-modules/record-transformer/services/record-input-transformer.service';
|
||||
import { workspaceValidator } from 'src/engine/core-modules/workspace/workspace.validate';
|
||||
import { FieldMetadataMap } from 'src/engine/metadata-modules/types/field-metadata-map';
|
||||
|
||||
type ArgPositionBackfillInput = {
|
||||
argIndex?: number;
|
||||
@ -168,7 +169,7 @@ export class QueryRunnerArgsFactory {
|
||||
fieldMetadataMapByNameByName: Record<string, FieldMetadataInterface>,
|
||||
argPositionBackfillInput: ArgPositionBackfillInput,
|
||||
): Promise<Partial<ObjectRecord>> {
|
||||
if (!data) {
|
||||
if (!isDefined(data)) {
|
||||
return Promise.resolve({});
|
||||
}
|
||||
|
||||
@ -210,6 +211,7 @@ export class QueryRunnerArgsFactory {
|
||||
}
|
||||
case FieldMetadataType.NUMBER:
|
||||
case FieldMetadataType.RICH_TEXT:
|
||||
case FieldMetadataType.PHONES:
|
||||
case FieldMetadataType.RICH_TEXT_V2:
|
||||
case FieldMetadataType.LINKS:
|
||||
case FieldMetadataType.EMAILS: {
|
||||
|
||||
Reference in New Issue
Block a user