UNPKG

@directus/api

Version:

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

73 lines (71 loc) 3.07 kB
import { parseJSON } from "@directus/utils"; //#region src/database/migrations/20211007A-update-presets.ts async function up(knex) { await knex.schema.alterTable("directus_presets", (table) => { table.json("filter"); }); const presets = await knex.select("id", "filters", "layout_query").from("directus_presets"); for (const preset of presets) { if (preset.filters) { const oldFilters = (typeof preset.filters === "string" ? parseJSON(preset.filters) : preset.filters) ?? []; if (oldFilters.length === 0) continue; const newFilter = { _and: [] }; for (const oldFilter of oldFilters) { if (oldFilter.key === "hide-archived") continue; newFilter._and.push({ [oldFilter.field]: { ["_" + oldFilter.operator]: oldFilter.value } }); } if (newFilter._and.length > 0) await knex("directus_presets").update({ filter: JSON.stringify(newFilter) }).where("id", "=", preset.id); } if (preset.layout_query) { const layoutQuery = typeof preset.layout_query === "string" ? parseJSON(preset.layout_query) : preset.layout_query; for (const [layout, query] of Object.entries(layoutQuery)) { if (query.sort) query.sort = [query.sort]; layoutQuery[layout] = query; } await knex("directus_presets").update({ layout_query: JSON.stringify(layoutQuery) }).where("id", "=", preset.id); } } await knex.schema.alterTable("directus_presets", (table) => { table.dropColumn("filters"); }); } async function down(knex) { const { nanoid } = await import("nanoid"); await knex.schema.alterTable("directus_presets", (table) => { table.json("filters"); }); const presets = await knex.select("id", "filter", "layout_query").from("directus_presets"); for (const preset of presets) { if (preset.filter) { const newFilter = (typeof preset.filter === "string" ? parseJSON(preset.filter) : preset.filter) ?? {}; if (Object.keys(newFilter).length === 0) continue; const oldFilters = []; for (const filter of newFilter._and ?? []) { const field = Object.keys(filter)?.[0]; const operator = Object.keys(Object.values(filter)?.[0] ?? {})?.[0]; const value = Object.values(Object.values(filter)?.[0] ?? {})?.[0]; if (!field || !operator || !value) continue; oldFilters.push({ key: nanoid(), field, operator: operator.substring(1), value }); } if (oldFilters.length > 0) await knex("directus_presets").update({ filters: JSON.stringify(oldFilters) }).where("id", "=", preset.id); } if (preset.layout_query) { const layoutQuery = typeof preset.layout_query === "string" ? parseJSON(preset.layout_query) : preset.layout_query; for (const [layout, query] of Object.entries(layoutQuery)) { if (query.sort && Array.isArray(query.sort)) query.sort = query.sort?.[0] ?? null; layoutQuery[layout] = query; } await knex("directus_presets").update({ layout_query: JSON.stringify(layoutQuery) }).where("id", "=", preset.id); } } await knex.schema.alterTable("directus_presets", (table) => { table.dropColumn("filter"); }); } //#endregion export { down, up };