- Asociar entornos locales con activos y conservar su trazabilidad. - Registrar la cuenta de acceso del mapeo con historial de cambios. - Calcular cobertura documental específica sin alterar la cobertura general. - Añadir migraciones, validaciones, endpoints protegidos, pruebas y documentación.
43 lines
2.5 KiB
TypeScript
43 lines
2.5 KiB
TypeScript
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)"
|
|
);
|
|
}
|
|
}
|