metis-desk/modules/assets/src/api/infrastructure/persistence/network-share-publication-migration.ts

30 lines
1.8 KiB
TypeScript
Raw Normal View History

import type { Sequelize } from "sequelize";
export async function migrateNetworkSharePublications(database: Sequelize) {
await database.query(`CREATE TABLE IF NOT EXISTS asset_network_share_publications (
id CHAR(36) BINARY NOT NULL PRIMARY KEY,
companyId CHAR(36) BINARY NOT NULL,
assetId CHAR(36) BINARY NOT NULL,
resourceId CHAR(36) BINARY NOT NULL,
predecessorId CHAR(36) BINARY NULL,
startedAt VARCHAR(30) NOT NULL,
startedBy CHAR(36) BINARY NOT NULL,
endedAt VARCHAR(30) NULL,
endedBy CHAR(36) BINARY NULL,
activeResourceId CHAR(36) BINARY NULL,
UNIQUE KEY publication_active_resource (activeResourceId),
UNIQUE KEY publication_successor (predecessorId),
UNIQUE KEY publication_scope (id,companyId,resourceId),
KEY publication_asset (companyId,assetId,id),
KEY publication_resource (companyId,resourceId,id),
CONSTRAINT publication_active CHECK ((endedAt IS NULL AND endedBy IS NULL AND activeResourceId IS NOT NULL AND activeResourceId=resourceId) OR (endedAt IS NOT NULL AND endedBy IS NOT NULL AND activeResourceId IS NULL)),
CONSTRAINT publication_previous_identity CHECK (predecessorId IS NULL OR predecessorId<>id),
CONSTRAINT publication_period CHECK (endedAt IS NULL OR endedAt>=startedAt),
CONSTRAINT publication_asset_fk FOREIGN KEY (companyId,assetId) REFERENCES assets(companyId,id),
CONSTRAINT publication_share_fk FOREIGN KEY (resourceId,companyId) REFERENCES resource_network_shares(resourceId,companyId),
CONSTRAINT publication_previous_fk FOREIGN KEY (predecessorId,companyId,resourceId) REFERENCES asset_network_share_publications(id,companyId,resourceId),
CONSTRAINT publication_start_actor FOREIGN KEY (startedBy) REFERENCES users(id),
CONSTRAINT publication_end_actor FOREIGN KEY (endedBy) REFERENCES users(id)
) ENGINE=InnoDB`);
}