import type { Sequelize } from "sequelize"; import { QueryTypes } from "sequelize"; /** Primero raĆ­ces de Access; la FK de Assets se completa antes de habilitar los comandos. */ export async function migrateLocalIdentityEnvironments(database: Sequelize) { await database.query(`CREATE TABLE IF NOT EXISTS access_local_identity_environments ( id CHAR(36) BINARY NOT NULL PRIMARY KEY, companyId CHAR(36) BINARY NOT NULL, workspaceId CHAR(36) BINARY NOT NULL, environmentId CHAR(36) BINARY NOT NULL, assetId CHAR(36) BINARY NOT NULL, systemId CHAR(36) BINARY NOT NULL, systemWorkspaceId CHAR(36) BINARY NOT NULL, environmentKind VARCHAR(30) NOT NULL DEFAULT 'environment', systemKind VARCHAR(30) NOT NULL DEFAULT 'system', identityScope VARCHAR(20) NOT NULL DEFAULT 'local-device', startedAt VARCHAR(24) NOT NULL, startedBy CHAR(36) BINARY NOT NULL, endedAt VARCHAR(24) NULL, endedBy CHAR(36) BINARY NULL, UNIQUE KEY local_identity_environment (environmentId), KEY local_identity_asset_page (companyId,assetId,id), CONSTRAINT local_identity_kind CHECK (environmentKind='environment' AND systemKind='system' AND identityScope='local-device'), CONSTRAINT local_identity_period CHECK ((endedAt IS NULL AND endedBy IS NULL) OR (endedAt IS NOT NULL AND endedBy IS NOT NULL AND endedAt>=startedAt)), CONSTRAINT local_identity_environment_fk FOREIGN KEY (environmentId,workspaceId,environmentKind) REFERENCES access_items(id,workspaceId,kind), CONSTRAINT local_identity_system_fk FOREIGN KEY (systemId,systemWorkspaceId,systemKind) REFERENCES access_items(id,workspaceId,kind), CONSTRAINT local_identity_company FOREIGN KEY (workspaceId,companyId) REFERENCES access_workspaces(id,companyId), CONSTRAINT local_identity_start_actor FOREIGN KEY (startedBy) REFERENCES users(id), CONSTRAINT local_identity_end_actor FOREIGN KEY (endedBy) REFERENCES users(id) ) ENGINE=InnoDB`); } export async function completeLocalIdentityAssetConstraint(database: Sequelize) { const constraints = await database.query( "SELECT CONSTRAINT_NAME FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='access_local_identity_environments' AND CONSTRAINT_NAME='local_identity_asset_fk'", { type: QueryTypes.SELECT } ); if (!constraints.length) { await database.query( "ALTER TABLE access_local_identity_environments ADD CONSTRAINT local_identity_asset_fk FOREIGN KEY (companyId,assetId) REFERENCES assets(companyId,id)" ); } }