metis-desk/modules/companies/src/api/infrastructure/persistence/configuration-resource-references.ts
2026-10-25 01:19:17 +02:00

41 lines
1.3 KiB
TypeScript

import type { ResourcePurpose } from "@metis/resources/common";
import type { IResourceReferenceSession } from "@metis/resources/services";
import { UniqueID } from "@repo/rdx-ddd";
/** Proyecta referencias globales ya resueltas por Resources; no decide elegibilidad ni abre transacciones. */
export async function loadGlobalConfigurationReferences(
session: IResourceReferenceSession,
purpose: ResourcePurpose,
ids: readonly string[]
) {
const globalResources = [];
for (let offset = 0; offset < ids.length; offset += 100) {
const resolved = await session.resolve({
purpose,
ids: ids.slice(offset, offset + 100),
});
if (resolved.purpose !== purpose) {
throw new Error("Propósito de referencia incompatible.");
}
for (const item of resolved.items) {
if (item.status === "resolved" && item.reference.scope === "global") {
const identity = UniqueID.create(item.reference.id);
if (!identity.isSuccess) {
throw new Error("Identidad global persistida inválida.");
}
globalResources.push({
id: identity.data,
active: item.reference.active,
usage: item.reference.kind,
expiresOn: null,
});
}
}
}
return globalResources;
}