UNPKG

@directus/api

Version:

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

44 lines (42 loc) 1.9 kB
import { getHelpers } from "../helpers/index.js"; import { uniq } from "lodash-es"; //#region src/database/migrations/20210927A-replace-fields-group.ts async function up(knex) { const helpers = getHelpers(knex); const groupsInUse = await knex.select("id", "group").from("directus_fields").whereNotNull("group"); const groupIDs = uniq(groupsInUse.map(({ group }) => group)); const groupFields = await knex.select("id", "field").from("directus_fields").whereIn("id", groupIDs); const groupMap = /* @__PURE__ */ new Map(); for (const { id, field } of groupFields) groupMap.set(id, field); await knex.schema.alterTable("directus_fields", (table) => { table.dropForeign("group"); }); await knex.schema.alterTable("directus_fields", (table) => { table.dropColumn("group"); }); await knex.schema.alterTable("directus_fields", (table) => { table.string("group", helpers.schema.getColumnNameMaxLength()); }); for (const { id, group } of groupsInUse) await knex("directus_fields").update({ group: groupMap.get(group) }).where({ id }); } async function down(knex) { const fieldsThatUseAGroup = await knex.select("id", "collection", "group").from("directus_fields").whereNotNull("group"); if (fieldsThatUseAGroup.length === 0) return; const groupMap = /* @__PURE__ */ new Map(); for (const { collection, group } of fieldsThatUseAGroup) { const { id } = await knex.select("id").from("directus_fields").where({ collection, field: group }).first(); groupMap.set(group, id); } await knex.schema.alterTable("directus_fields", (table) => { table.dropColumn("group"); }); await knex.schema.alterTable("directus_fields", (table) => { table.integer("group").references("id").inTable("directus_fields"); }); for (const { id, group } of fieldsThatUseAGroup) await knex("directus_fields").update({ group: groupMap.get(group) }).where({ id }); } //#endregion export { down, up };