metis-desk/modules/assets/src/api/infrastructure/persistence/local-identity-asset-reader.ts
David fe6ec361b7 feat(companies): vincular identidades locales a activos y añadir cuenta de acceso a FolderMapping
- 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.
2026-10-21 11:25:23 +02:00

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 }>();
}
}