UNPKG

@directus/api

Version:

Directus is a real-time API and App dashboard for managing SQL database content

80 lines (78 loc) 2.89 kB
import { parseJSON, toArray } from "@directus/utils"; import { randomUUID } from "node:crypto"; //#region src/database/migrations/20220429A-add-flows.ts async function up(knex) { await knex.schema.createTable("directus_flows", (table) => { table.uuid("id").primary().notNullable(); table.string("name").notNullable(); table.string("icon", 30); table.string("color").nullable(); table.text("description"); table.string("status").notNullable().defaultTo("active"); table.string("trigger"); table.string("accountability").defaultTo("all"); table.json("options"); table.uuid("operation").unique(); table.timestamp("date_created").defaultTo(knex.fn.now()); table.uuid("user_created").references("id").inTable("directus_users").onDelete("SET NULL"); }); await knex.schema.createTable("directus_operations", (table) => { table.uuid("id").primary().notNullable(); table.string("name"); table.string("key").notNullable(); table.string("type").notNullable(); table.integer("position_x").notNullable(); table.integer("position_y").notNullable(); table.json("options"); table.uuid("resolve").unique().references("id").inTable("directus_operations"); table.uuid("reject").unique().references("id").inTable("directus_operations"); table.uuid("flow").notNullable().references("id").inTable("directus_flows").onDelete("CASCADE"); table.timestamp("date_created").defaultTo(knex.fn.now()); table.uuid("user_created").references("id").inTable("directus_users").onDelete("SET NULL"); }); const webhooks = await knex.select("*").from("directus_webhooks"); const flows = []; const operations = []; for (const webhook of webhooks) { const flowID = randomUUID(); flows.push({ id: flowID, name: webhook.name, status: "inactive", trigger: "hook", options: JSON.stringify({ name: webhook.name, type: "action", scope: toArray(webhook.actions).map((scope) => `items.${scope}`), collections: toArray(webhook.collections) }) }); operations.push({ id: randomUUID(), name: "Request", key: "request", type: "request", position_x: 21, position_y: 1, options: JSON.stringify({ url: webhook.url, headers: typeof webhook.headers === "string" ? parseJSON(webhook.headers) : webhook.headers, data: webhook.data ? "{{$trigger}}" : null, method: webhook.method }), date_created: /* @__PURE__ */ new Date(), flow: flowID }); } if (flows.length && operations.length) { await knex.insert(flows).into("directus_flows"); await knex.insert(operations).into("directus_operations"); for (const operation of operations) await knex("directus_flows").update({ operation: operation.id }).where({ id: operation.flow }); } } async function down(knex) { await knex.schema.dropTable("directus_operations"); await knex.schema.dropTable("directus_flows"); } //#endregion export { down, up };