From f03a45b8b2b879aa59dd0ee6f90869ffbba71a1b Mon Sep 17 00:00:00 2001 From: Ben <4991309+NuroDev@users.noreply.github.com> Date: Tue, 11 Feb 2025 12:57:50 +0000 Subject: [PATCH] Refactored `indexes` & `triggers` object structures (#44) * Refactored model indexes & triggers from arrays to objects * Updated model unit tests --- examples/models.ts | 12 ++++++------ src/schema/model.ts | 4 ++-- tests/schema/model.test.ts | 36 ++++++++++++++++++------------------ 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/examples/models.ts b/examples/models.ts index c41f9bb..e099b09 100644 --- a/examples/models.ts +++ b/examples/models.ts @@ -14,22 +14,22 @@ export const Account = model({ birthday: date(), }, - indexes: [ - { + indexes: { + name: { fields: [{ slug: 'name', order: 'ASC', collation: 'BINARY' }], unique: true, }, - ], + }, - triggers: [ - { + triggers: { + afterInsert: { when: 'AFTER', action: 'INSERT', fields: [{ slug: 'name' }], // @ts-expect-error: The queries need to be adjusted in the TS client. effects: () => [add.member.with({ name: 'admin', email: 'admin@ronin.io' })], }, - ], + }, }); export const Profile = model({ diff --git a/src/schema/model.ts b/src/schema/model.ts index 47d6f1b..1ea4653 100644 --- a/src/schema/model.ts +++ b/src/schema/model.ts @@ -82,12 +82,12 @@ export interface Model> /** * Database indexes to optimize query performance. */ - indexes?: Array>>; + indexes?: Record>>; /** * Queries that run automatically in response to other queries. */ - triggers?: Array>>; + triggers?: Record>>; /** * Predefined query instructions that can be reused across multiple different queries. diff --git a/tests/schema/model.test.ts b/tests/schema/model.test.ts index 1e0c97b..ca9587e 100644 --- a/tests/schema/model.test.ts +++ b/tests/schema/model.test.ts @@ -454,11 +454,11 @@ describe('models', () => { fields: { name: string({ required: true }), }, - indexes: [ - { + indexes: { + name: { fields: [{ slug: 'name', order: 'ASC', collation: 'BINARY' }], }, - ], + }, }); expect(Account).toBeTypeOf('object'); // @ts-expect-error: The Account object has 'fields'. @@ -476,11 +476,11 @@ describe('models', () => { required: true, }, ], - indexes: [ - { + indexes: { + name: { fields: [{ slug: 'name', order: 'ASC', collation: 'BINARY' }], }, - ], + }, }); }); @@ -493,14 +493,14 @@ describe('models', () => { fields: { name: string({ required: true }), }, - indexes: [ - { + indexes: { + name: { fields: [ // @ts-expect-error This is intended. { slug: 'thisFieldDoesNotExist', order: 'ASC', collation: 'BINARY' }, ], }, - ], + }, }); } catch (err) { const error = err as Error; @@ -520,11 +520,11 @@ describe('models', () => { fields: { name: string({ required: true }), }, - indexes: [ - { + indexes: { + name: { fields: [], }, - ], + }, }); } catch (err) { const error = err as Error; @@ -543,15 +543,15 @@ describe('models', () => { fields: { name: string({ required: true }), }, - triggers: [ - { + triggers: { + afterInsert: { action: 'INSERT', when: 'AFTER', fields: [{ slug: 'name' }], // @ts-expect-error: The queries need to be adjusted in the TS client. effects: [add.account.with({ name: 'Lorena' })], }, - ], + }, })); expect(Account).toBeTypeOf('object'); @@ -570,8 +570,8 @@ describe('models', () => { required: true, }, ], - triggers: [ - { + triggers: { + afterInsert: { action: 'INSERT', when: 'AFTER', effects: [ @@ -589,7 +589,7 @@ describe('models', () => { ], fields: [{ slug: 'name' }], }, - ], + }, }); });