* feat: add enum type (RATING, SELECT, MULTI_SELECT)
feat: wip enum type
feat: try to alter enum
feat: wip enum
feat: wip enum
feat: schema-builder can handle enum
fix: return default value in field metadata response
* fix: create fieldMedata with options
* fix: lint issues
* fix: rename abstract factory
* feat: drop `PHONE` and `EMAIL` fieldMetadata types
* feat: drop `VARCHAR` fieldMetadata type and rely on `TEXT`
* Revert "feat: drop `PHONE` and `EMAIL` fieldMetadata types"
This reverts commit 3857539f7d.
55 lines
1.3 KiB
TypeScript
55 lines
1.3 KiB
TypeScript
import { BadRequestException } from '@nestjs/common';
|
|
|
|
import { FieldMetadataDefaultSerializableValue } from 'src/metadata/field-metadata/interfaces/field-metadata-default-value.interface';
|
|
|
|
export const serializeDefaultValue = (
|
|
defaultValue?: FieldMetadataDefaultSerializableValue,
|
|
) => {
|
|
if (defaultValue === undefined || defaultValue === null) {
|
|
return null;
|
|
}
|
|
|
|
// Dynamic default values
|
|
if (
|
|
!Array.isArray(defaultValue) &&
|
|
typeof defaultValue === 'object' &&
|
|
'type' in defaultValue
|
|
) {
|
|
switch (defaultValue.type) {
|
|
case 'uuid':
|
|
return 'public.uuid_generate_v4()';
|
|
case 'now':
|
|
return 'now()';
|
|
default:
|
|
throw new BadRequestException('Invalid dynamic default value type');
|
|
}
|
|
}
|
|
|
|
// Static default values
|
|
if (typeof defaultValue === 'string') {
|
|
return `'${defaultValue}'`;
|
|
}
|
|
|
|
if (typeof defaultValue === 'number') {
|
|
return defaultValue;
|
|
}
|
|
|
|
if (typeof defaultValue === 'boolean') {
|
|
return defaultValue;
|
|
}
|
|
|
|
if (defaultValue instanceof Date) {
|
|
return `'${defaultValue.toISOString()}'`;
|
|
}
|
|
|
|
if (Array.isArray(defaultValue)) {
|
|
return defaultValue;
|
|
}
|
|
|
|
if (typeof defaultValue === 'object') {
|
|
return `'${JSON.stringify(defaultValue)}'`;
|
|
}
|
|
|
|
throw new BadRequestException('Invalid default value');
|
|
};
|