From 2c0d3fcc5ad1bce2cbc47e82e76277918c66c565 Mon Sep 17 00:00:00 2001 From: chenos Date: Fri, 29 Apr 2022 12:00:24 +0800 Subject: [PATCH] feat: uuid field --- .../src/__tests__/fields/uuid-field.test.ts | 30 +++++++++++++++++++ packages/core/database/src/fields/index.ts | 3 ++ .../core/database/src/fields/uuid-field.ts | 21 +++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 packages/core/database/src/__tests__/fields/uuid-field.test.ts create mode 100644 packages/core/database/src/fields/uuid-field.ts diff --git a/packages/core/database/src/__tests__/fields/uuid-field.test.ts b/packages/core/database/src/__tests__/fields/uuid-field.test.ts new file mode 100644 index 000000000..ccd2a576f --- /dev/null +++ b/packages/core/database/src/__tests__/fields/uuid-field.test.ts @@ -0,0 +1,30 @@ +import { mockDatabase } from '../'; +import { Database } from '../../database'; + +describe('string field', () => { + let db: Database; + + beforeEach(async () => { + db = mockDatabase(); + }); + + afterEach(async () => { + await db.close(); + }); + + it('define', async () => { + const Test = db.collection({ + name: 'tests', + autoGenId: false, + fields: [ + { + type: 'uuid', + name: 'id', + primaryKey: true, + }, + ], + }); + await Test.sync(); + await Test.model.create(); + }); +}); diff --git a/packages/core/database/src/fields/index.ts b/packages/core/database/src/fields/index.ts index 1ee87cbe4..4070bbb0a 100644 --- a/packages/core/database/src/fields/index.ts +++ b/packages/core/database/src/fields/index.ts @@ -22,6 +22,7 @@ import { StringFieldOptions } from './string-field'; import { TextFieldOptions } from './text-field'; import { TimeFieldOptions } from './time-field'; import { UidFieldOptions } from './uid-field'; +import { UUIDFieldOptions } from './uuid-field'; import { VirtualFieldOptions } from './virtual-field'; export * from './array-field'; @@ -43,6 +44,7 @@ export * from './string-field'; export * from './text-field'; export * from './time-field'; export * from './uid-field'; +export * from './uuid-field'; export * from './virtual-field'; export type FieldOptions = @@ -64,6 +66,7 @@ export type FieldOptions = | TimeFieldOptions | DateFieldOptions | UidFieldOptions + | UUIDFieldOptions | PasswordFieldOptions | ContextFieldOptions | BelongsToFieldOptions diff --git a/packages/core/database/src/fields/uuid-field.ts b/packages/core/database/src/fields/uuid-field.ts new file mode 100644 index 000000000..f9af33703 --- /dev/null +++ b/packages/core/database/src/fields/uuid-field.ts @@ -0,0 +1,21 @@ +import { DataTypes } from 'sequelize'; +import { BaseColumnFieldOptions, Field, FieldContext } from './field'; + +export class UuidField extends Field { + constructor(options?: any, context?: FieldContext) { + super( + { + defaultValue: DataTypes.UUIDV4, + ...options, + }, + context, + ); + } + get dataType() { + return DataTypes.UUID; + } +} + +export interface UUIDFieldOptions extends BaseColumnFieldOptions { + type: 'uuid'; +}