- 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.
51 lines
1.6 KiB
TypeScript
51 lines
1.6 KiB
TypeScript
import type { Sequelize, Transaction } from "sequelize";
|
|
import { QueryTypes } from "sequelize";
|
|
|
|
import { NetworkSharePublicationSchema } from "../../../common/network-share-publications";
|
|
|
|
/** Proyección keyset compartida por consultas especializadas y proveedor tipado. */
|
|
export async function readPublicationPage(
|
|
database: Sequelize,
|
|
companyId: string,
|
|
selection: {
|
|
assetId?: string;
|
|
resourceId?: string;
|
|
includeEnded: boolean;
|
|
afterId?: string;
|
|
pageSize: number;
|
|
},
|
|
transaction?: Transaction
|
|
) {
|
|
const conditions = ["p.companyId=:companyId"];
|
|
|
|
if (selection.assetId) {
|
|
conditions.push("p.assetId=:assetId");
|
|
}
|
|
if (selection.resourceId) {
|
|
conditions.push("p.resourceId=:resourceId");
|
|
}
|
|
if (!selection.includeEnded) {
|
|
conditions.push("p.endedAt IS NULL");
|
|
}
|
|
if (selection.afterId) {
|
|
conditions.push("p.id>:afterId");
|
|
}
|
|
const rows = await database.query(
|
|
`SELECT p.id,p.companyId,p.assetId,p.resourceId,p.predecessorId,p.startedAt,p.startedBy,p.endedAt,p.endedBy FROM asset_network_share_publications p WHERE ${conditions.join(" AND ")} ORDER BY p.id ASC LIMIT :limit`,
|
|
{
|
|
replacements: {
|
|
companyId,
|
|
assetId: selection.assetId ?? null,
|
|
resourceId: selection.resourceId ?? null,
|
|
afterId: selection.afterId ?? null,
|
|
limit: selection.pageSize + 1,
|
|
},
|
|
type: QueryTypes.SELECT,
|
|
...(transaction ? { transaction } : {}),
|
|
}
|
|
);
|
|
const parsed = rows.map((row) => NetworkSharePublicationSchema.parse(row));
|
|
|
|
return { rows: parsed.slice(0, selection.pageSize), hasMore: parsed.length > selection.pageSize };
|
|
}
|