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