import { Knex } from "knex"; import {ID, TENANT_ID, DESCRIPTOR, CREATED_AT, DESCRIPTOR_SCHEMA_ID, DESCRIPTOR_SCHEMA_VERSION, EDITABLE, CASCADE,ROLE_ID, SITE_ID, ROLE_SPACES, SPACE, IS_DEFAULT, WORKPAGE, CURRENT_VERSION_ID, DRAFT, VERSIONS, WORKPAGE_VERSION_ID, CONTENTS, WORKPAGE_ID, WORKPAGE_VERSION, BASELINE_VERSION_ID, WORKPAGE_DRAFT, PUBLISHED_TIMESTAMP, PUBLISHED_BY_USER, SPACE_WORKPAGES, SPACE_ID, WORKPAGE_WORKPAGE_VERSIONS, INSTANCE_ID} from "../../../utils/globals" export function up(knex: Knex): Promise { return knex.schema .createTable(SPACE, function (table) { table.string(ID).notNullable(); table.string(TENANT_ID).notNullable(); table.string(INSTANCE_ID).notNullable(); table.timestamp(CREATED_AT).defaultTo(knex.fn.now()); table.string(DESCRIPTOR_SCHEMA_ID); table.string(DESCRIPTOR_SCHEMA_VERSION).notNullable(); table.jsonb(DESCRIPTOR).notNullable(); table.boolean(EDITABLE).notNullable(); table.boolean(IS_DEFAULT).notNullable().defaultTo(false); }) .alterTable(SPACE, function (table) { table.primary([ID], {constraintName: 'Space_pkey'}); }) .createTable(WORKPAGE, function (table){ table.string(ID).notNullable(); table.string(TENANT_ID).notNullable(); table.string(INSTANCE_ID).notNullable(); table.timestamp(CREATED_AT).defaultTo(knex.fn.now()); table.string(DESCRIPTOR_SCHEMA_ID); table.string(DESCRIPTOR_SCHEMA_VERSION).notNullable(); table.jsonb(DESCRIPTOR).notNullable(); table.boolean(EDITABLE).notNullable(); table.boolean(IS_DEFAULT).notNullable().defaultTo(false); table.string(CURRENT_VERSION_ID).notNullable().defaultTo('false'); table.string(DRAFT); table.string(VERSIONS); }) .alterTable(WORKPAGE, function (table) { table.primary([ID], {constraintName: 'WorkPage_pkey'}); }) .createTable(WORKPAGE_DRAFT, function (table){ table.string(ID).notNullable(); table.string(TENANT_ID).notNullable(); table.string(INSTANCE_ID).notNullable(); table.timestamp(CREATED_AT).defaultTo(knex.fn.now()); table.jsonb(CONTENTS).notNullable(); table.string(SITE_ID); table.string(WORKPAGE_ID); table.string(BASELINE_VERSION_ID); }) .alterTable(WORKPAGE_DRAFT, function (table) { table.primary([ID], {constraintName: 'WorkPageDraft_pkey'}); table.foreign([WORKPAGE_ID], 'WorkPageDraft_WorkPageId_fkey').references([ID]).inTable(WORKPAGE).onUpdate(CASCADE).onDelete(CASCADE); }) .createTable(WORKPAGE_VERSION, function (table) { table.string(ID).notNullable(); table.string(TENANT_ID).notNullable(); table.string(INSTANCE_ID).notNullable(); table.timestamp(CREATED_AT).defaultTo(knex.fn.now()); table.jsonb(CONTENTS).notNullable(); table.string(WORKPAGE_ID); table.string(BASELINE_VERSION_ID); table.timestamp(PUBLISHED_TIMESTAMP).defaultTo(knex.fn.now()); table.string(PUBLISHED_BY_USER).notNullable(); }) .alterTable(WORKPAGE_VERSION, function (table) { table.primary([ID], {constraintName: 'WorkPageVersion_pkey'}); }) .createTable(ROLE_SPACES, function (table){ table.string(ROLE_ID).notNullable() table.string(SPACE_ID).notNullable() }) .alterTable(ROLE_SPACES, function (table) { table.primary([ROLE_ID,SPACE_ID], {constraintName: 'Role-Spaces_pkey'}); table.foreign([SPACE_ID], 'Role-Spaces_SpaceId_fkey').references([ID]).inTable(SPACE).onUpdate(CASCADE).onDelete(CASCADE); }) .createTable(SPACE_WORKPAGES, function (table){ table.string(SPACE_ID).notNullable(); table.string(WORKPAGE_ID).notNullable(); }) .alterTable(SPACE_WORKPAGES, function (table) { table.primary([SPACE_ID, WORKPAGE_ID],{constraintName: 'Space-WorkPages_pkey'}); table.foreign([SPACE_ID], 'Space-WorkPages_SpaceId_fkey').references([ID]).inTable(SPACE).onUpdate(CASCADE).onDelete(CASCADE); table.foreign([WORKPAGE_ID], 'Space-WorkPages_WorkPageId_fkey').references([ID]).inTable(WORKPAGE).onUpdate(CASCADE).onDelete(CASCADE); }) .createTable(WORKPAGE_WORKPAGE_VERSIONS, function (table){ table.string(WORKPAGE_ID).notNullable(); table.string(WORKPAGE_VERSION_ID).notNullable(); }) .alterTable(WORKPAGE_WORKPAGE_VERSIONS, function (table) { table.primary([WORKPAGE_ID, WORKPAGE_VERSION_ID],{constraintName: 'WorkPage-WorkPageVersions_pkey'}); table.foreign([WORKPAGE_ID], 'WorkPage-WorkPageVersions_WorkPageId_fkey').references([ID]).inTable(WORKPAGE).onUpdate(CASCADE).onDelete(CASCADE); table.foreign([WORKPAGE_VERSION_ID], 'WorkPage-WorkPageVersions_WorkPageVersionId_fkey').references([ID]).inTable(WORKPAGE_VERSION).onUpdate(CASCADE).onDelete(CASCADE); }) } export function down(knex: Knex): Promise { return knex.schema .raw(`DROP TABLE ${SPACE}`) .raw(`DROP TABLE ${WORKPAGE}`) .raw(`DROP TABLE ${WORKPAGE_DRAFT}`) .raw(`DROP TABLE ${WORKPAGE_VERSION}`) .raw(`DROP TABLE ${ROLE_SPACES}`) .raw(`DROP TABLE "${SPACE_WORKPAGES}"`) .raw(`DROP TABLE "${WORKPAGE_WORKPAGE_VERSIONS}"`) }