- 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.
32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import type { UniqueID } from "@repo/rdx-ddd";
|
|
import { Maybe } from "@repo/rdx-utils";
|
|
import type { Sequelize, Transaction } from "sequelize";
|
|
import { QueryTypes } from "sequelize";
|
|
import { z } from "zod/v4";
|
|
|
|
/** Lectura mínima dentro de la transacción de Companies, sin exponer repositorios ni el ORM. */
|
|
export class LocalIdentityAssetReader {
|
|
constructor(
|
|
private readonly database: Sequelize,
|
|
private readonly transaction: Transaction
|
|
) {}
|
|
|
|
async find(company: UniqueID, asset: UniqueID) {
|
|
const rows = z.array(z.object({ status: z.string() })).parse(
|
|
await this.database.query(
|
|
"SELECT status FROM assets WHERE companyId=:companyId AND id=:assetId FOR UPDATE",
|
|
{
|
|
replacements: { companyId: company.toPrimitive(), assetId: asset.toPrimitive() },
|
|
transaction: this.transaction,
|
|
type: QueryTypes.SELECT,
|
|
}
|
|
)
|
|
);
|
|
const row = rows[0];
|
|
|
|
return row
|
|
? Maybe.some({ operational: ["operational", "available", "in_use"].includes(row.status) })
|
|
: Maybe.none<{ operational: boolean }>();
|
|
}
|
|
}
|