Add fullName field metadata type (#2563)

* Add fullName field metadata type

* update seeds
This commit is contained in:
Weiko
2023-11-17 16:52:51 +01:00
committed by GitHub
parent f58e4263bc
commit 4870b0ac30
13 changed files with 147 additions and 92 deletions

View File

@ -30,6 +30,7 @@ export enum FieldMetadataType {
LINK = 'LINK',
CURRENCY = 'CURRENCY',
RELATION = 'RELATION',
FULL_NAME = 'FULL_NAME',
}
@Entity('fieldMetadata')

View File

@ -33,11 +33,17 @@ interface FieldMetadataDefaultValueCurrency {
currencyCode: string;
}
interface FieldMetadataDefaultValueFullName {
firstName: string;
lastName: string;
}
type AllFieldMetadataDefaultValueTypes =
| FieldMetadataScalarDefaultValue
| FieldMetadataDynamicDefaultValue
| FieldMetadataDefaultValueLink
| FieldMetadataDefaultValueCurrency;
| FieldMetadataDefaultValueCurrency
| FieldMetadataDefaultValueFullName;
type FieldMetadataDefaultValueMapping = {
[FieldMetadataType.UUID]: FieldMetadataDefaultValueString;
@ -51,6 +57,7 @@ type FieldMetadataDefaultValueMapping = {
[FieldMetadataType.ENUM]: FieldMetadataDefaultValueString;
[FieldMetadataType.LINK]: FieldMetadataDefaultValueLink;
[FieldMetadataType.CURRENCY]: FieldMetadataDefaultValueCurrency;
[FieldMetadataType.FULL_NAME]: FieldMetadataDefaultValueFullName;
};
type DefaultValueByFieldMetadata<T extends FieldMetadataType | 'default'> = [

View File

@ -14,6 +14,11 @@ export interface FieldMetadataTargetColumnMapCurrency {
currencyCode: string;
}
export interface FieldMetadataTargetColumnMapFullName {
firstName: string;
lastName: string;
}
type AllFieldMetadataTypes = {
[key: string]: string;
};
@ -21,6 +26,7 @@ type AllFieldMetadataTypes = {
type FieldMetadataTypeMapping = {
[FieldMetadataType.LINK]: FieldMetadataTargetColumnMapLink;
[FieldMetadataType.CURRENCY]: FieldMetadataTargetColumnMapCurrency;
[FieldMetadataType.FULL_NAME]: FieldMetadataTargetColumnMapFullName;
};
type TypeByFieldMetadata<T extends FieldMetadataType | 'default'> =

View File

@ -123,6 +123,25 @@ export function convertFieldMetadataToColumnActions(
},
];
}
case FieldMetadataType.FULL_NAME: {
const defaultValue =
fieldMetadata.defaultValue as FieldMetadataDefaultValue<FieldMetadataType.FULL_NAME>;
return [
{
action: WorkspaceMigrationColumnActionType.CREATE,
columnName: fieldMetadata.targetColumnMap.firstName,
columnType: 'varchar',
defaultValue: serializeDefaultValue(defaultValue?.firstName),
},
{
action: WorkspaceMigrationColumnActionType.CREATE,
columnName: fieldMetadata.targetColumnMap.lastName,
columnType: 'varchar',
defaultValue: serializeDefaultValue(defaultValue?.lastName),
},
];
}
default:
throw new Error(`Unknown type ${fieldMetadata.type}`);
}

View File

@ -39,6 +39,12 @@ export function generateTargetColumnMap(
amountMicros: `${columnName}AmountMicros`,
currencyCode: `${columnName}CurrencyCode`,
};
case FieldMetadataType.FULL_NAME:
return {
firstName: `${columnName}FirstName`,
lastName: `${columnName}LastName`,
};
default:
throw new BadRequestException(`Unknown type ${type}`);
}

View File

@ -72,6 +72,15 @@ export const validateDefaultValueBasedOnType = (
typeof defaultValue.currencyCode === 'string'
);
case FieldMetadataType.FULL_NAME:
return (
typeof defaultValue === 'object' &&
'firstName' in defaultValue &&
typeof defaultValue.firstName === 'string' &&
'lastName' in defaultValue &&
typeof defaultValue.lastName === 'string'
);
default:
return false;
}

View File

@ -13,12 +13,12 @@ export const addPersonTable: WorkspaceMigrationTableAction[] = [
action: 'alter',
columns: [
{
columnName: 'firstName',
columnName: 'nameFirstName',
columnType: 'varchar',
action: WorkspaceMigrationColumnActionType.CREATE,
},
{
columnName: 'lastName',
columnName: 'nameLastName',
columnType: 'varchar',
action: WorkspaceMigrationColumnActionType.CREATE,
},