From 2bce7424f1b876895963cfa596477ff0f830d883 Mon Sep 17 00:00:00 2001 From: Adria Navarro Date: Fri, 19 Apr 2024 13:42:59 +0200 Subject: [PATCH] Refactor logic --- .../server/src/integrations/utils/utils.ts | 129 ++++++------------ 1 file changed, 43 insertions(+), 86 deletions(-) diff --git a/packages/server/src/integrations/utils/utils.ts b/packages/server/src/integrations/utils/utils.ts index c00cca5f23..0a71c85905 100644 --- a/packages/server/src/integrations/utils/utils.ts +++ b/packages/server/src/integrations/utils/utils.ts @@ -296,80 +296,6 @@ export function isIsoDateString(str: string) { return d.toISOString() === trimmedValue } -enum CopyAction { - ALWAYS_KEEP = "alwaysKeep", - COPY_IF_TYPE = "copyIfType", -} - -SQL_TYPE_MAP - -const SqlCopyTypeByFieldMapping: Record< - FieldType, - | { action: CopyAction.ALWAYS_KEEP } - | { action: CopyAction.COPY_IF_TYPE; types: PrimitiveTypes[] } -> = { - [FieldType.LINK]: { action: CopyAction.ALWAYS_KEEP }, - [FieldType.FORMULA]: { action: CopyAction.ALWAYS_KEEP }, - [FieldType.STRING]: { - action: CopyAction.COPY_IF_TYPE, - types: [FieldType.STRING], - }, - [FieldType.OPTIONS]: { - action: CopyAction.COPY_IF_TYPE, - types: [FieldType.STRING], - }, - [FieldType.LONGFORM]: { - action: CopyAction.COPY_IF_TYPE, - types: [FieldType.STRING], - }, - [FieldType.NUMBER]: { - action: CopyAction.COPY_IF_TYPE, - types: [FieldType.BOOLEAN, FieldType.NUMBER], - }, - [FieldType.BOOLEAN]: { - action: CopyAction.COPY_IF_TYPE, - types: [FieldType.BOOLEAN, FieldType.NUMBER], - }, - [FieldType.ARRAY]: { - action: CopyAction.COPY_IF_TYPE, - types: [FieldType.JSON, FieldType.STRING], - }, - [FieldType.DATETIME]: { - action: CopyAction.COPY_IF_TYPE, - types: [FieldType.DATETIME, FieldType.STRING], - }, - [FieldType.ATTACHMENTS]: { - action: CopyAction.COPY_IF_TYPE, - types: [FieldType.JSON, FieldType.STRING], - }, - [FieldType.ATTACHMENT_SINGLE]: { - action: CopyAction.COPY_IF_TYPE, - types: [FieldType.JSON, FieldType.STRING], - }, - [FieldType.AUTO]: { - action: CopyAction.ALWAYS_KEEP, - }, - [FieldType.JSON]: { - action: CopyAction.COPY_IF_TYPE, - types: [FieldType.JSON, FieldType.STRING], - }, - [FieldType.INTERNAL]: { - action: CopyAction.ALWAYS_KEEP, - }, - [FieldType.BARCODEQR]: { - action: CopyAction.COPY_IF_TYPE, - types: [FieldType.STRING], - }, - [FieldType.BIGINT]: { - action: CopyAction.COPY_IF_TYPE, - types: [FieldType.BIGINT, FieldType.NUMBER], - }, - [FieldType.BB_REFERENCE]: { - action: CopyAction.COPY_IF_TYPE, - types: [FieldType.JSON, FieldType.STRING], - }, -} - /** * Looks for columns which need to be copied over into the new table definitions, like relationships, * options types and views. @@ -402,27 +328,58 @@ function copyExistingPropsOver( if (!Object.prototype.hasOwnProperty.call(existingTableSchema, key)) { continue } + const column = existingTableSchema[key] const existingColumnType = column?.type const updatedColumnType = table.schema[key]?.type - const map = SqlCopyTypeByFieldMapping[existingColumnType] - - let keepExistingSchema = map.action === CopyAction.ALWAYS_KEEP - if (map.action === CopyAction.COPY_IF_TYPE) { - const shouldDropLink = - existingColumnType === FieldType.LINK && - !tableIds.includes(column.tableId) - - keepExistingSchema = + const keepIfType = (...validTypes: PrimitiveTypes[]) => { + return ( isPrimitiveType(updatedColumnType) && table.schema[key] && - map.types?.includes(updatedColumnType) && - !shouldDropLink + validTypes.includes(updatedColumnType) + ) } - if (keepExistingSchema) { + const SqlCopyTypeByFieldMapping: Record boolean> = { + [FieldType.LINK]: () => { + const shouldKeepLink = + existingColumnType === FieldType.LINK && + tableIds.includes(column.tableId) + return shouldKeepLink + }, + [FieldType.FORMULA]: () => true, + [FieldType.AUTO]: () => true, + [FieldType.INTERNAL]: () => true, + [FieldType.STRING]: () => keepIfType(FieldType.STRING), + [FieldType.OPTIONS]: () => keepIfType(FieldType.STRING), + [FieldType.LONGFORM]: () => keepIfType(FieldType.STRING), + [FieldType.NUMBER]: () => + keepIfType(FieldType.BOOLEAN, FieldType.NUMBER), + + [FieldType.BOOLEAN]: () => + keepIfType(FieldType.BOOLEAN, FieldType.NUMBER), + [FieldType.ARRAY]: () => keepIfType(FieldType.JSON, FieldType.STRING), + [FieldType.DATETIME]: () => + keepIfType(FieldType.DATETIME, FieldType.STRING), + + [FieldType.ATTACHMENTS]: () => + keepIfType(FieldType.JSON, FieldType.STRING), + [FieldType.ATTACHMENT_SINGLE]: () => + keepIfType(FieldType.JSON, FieldType.STRING), + + [FieldType.JSON]: () => keepIfType(FieldType.JSON, FieldType.STRING), + [FieldType.BARCODEQR]: () => keepIfType(FieldType.STRING), + + [FieldType.BIGINT]: () => + keepIfType(FieldType.BIGINT, FieldType.NUMBER), + [FieldType.BB_REFERENCE]: () => + keepIfType(FieldType.JSON, FieldType.STRING), + } + + const shouldCopyDelegate = SqlCopyTypeByFieldMapping[existingColumnType] + if (shouldCopyDelegate()) { table.schema[key] = { ...existingTableSchema[key], externalType: