diff --git a/packages/backend/src/db/migrations/20250217134238_create_templates.js b/packages/backend/src/db/migrations/20250217134238_create_templates.js new file mode 100644 index 00000000..b8ac418e --- /dev/null +++ b/packages/backend/src/db/migrations/20250217134238_create_templates.js @@ -0,0 +1,13 @@ +export async function up(knex) { + return knex.schema.createTable('templates', (table) => { + table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid()')); + table.string('name'); + table.jsonb('flow_data'); + + table.timestamps(true, true); + }); +} + +export async function down(knex) { + return knex.schema.dropTable('templates'); +} diff --git a/packages/backend/src/models/__snapshots__/template.test.js.snap b/packages/backend/src/models/__snapshots__/template.test.js.snap new file mode 100644 index 00000000..255b248d --- /dev/null +++ b/packages/backend/src/models/__snapshots__/template.test.js.snap @@ -0,0 +1,29 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Template model > jsonSchema should have correct validations 1`] = ` +{ + "properties": { + "createdAt": { + "type": "string", + }, + "flowData": { + "type": "object", + }, + "id": { + "format": "uuid", + "type": "string", + }, + "name": { + "minLength": 1, + "type": "string", + }, + "updatedAt": { + "type": "string", + }, + }, + "required": [ + "name", + ], + "type": "object", +} +`; diff --git a/packages/backend/src/models/template.js b/packages/backend/src/models/template.js new file mode 100644 index 00000000..7137445f --- /dev/null +++ b/packages/backend/src/models/template.js @@ -0,0 +1,20 @@ +import Base from './base.js'; + +class Template extends Base { + static tableName = 'templates'; + + static jsonSchema = { + type: 'object', + required: ['name'], + + properties: { + id: { type: 'string', format: 'uuid' }, + name: { type: 'string', minLength: 1 }, + flowData: { type: 'object' }, + createdAt: { type: 'string' }, + updatedAt: { type: 'string' }, + }, + }; +} + +export default Template; diff --git a/packages/backend/src/models/template.test.js b/packages/backend/src/models/template.test.js new file mode 100644 index 00000000..a99aed40 --- /dev/null +++ b/packages/backend/src/models/template.test.js @@ -0,0 +1,12 @@ +import { describe, it, expect } from 'vitest'; +import Template from './template.js'; + +describe('Template model', () => { + it('tableName should return correct name', () => { + expect(Template.tableName).toBe('templates'); + }); + + it('jsonSchema should have correct validations', () => { + expect(Template.jsonSchema).toMatchSnapshot(); + }); +});