metis-desk/modules/resources/src/api/application/resource-response.builder.ts

31 lines
1.2 KiB
TypeScript
Raw Normal View History

2026-10-20 11:20:22 +00:00
import type { DirectoryDomainDTO } from "../../common/directory-domains";
2026-10-05 11:13:51 +00:00
import type { ResourceDTO } from "../../common/inventory";
import type { NetworkShareDTO } from "../../common/network-shares";
2026-10-05 11:13:51 +00:00
import type { Resource } from "../domain/resource.aggregate";
2026-10-10 10:01:58 +00:00
2026-10-05 11:13:51 +00:00
export function buildResourceResponse(
resource: Resource,
2026-10-20 11:20:22 +00:00
actors: ReadonlyMap<string, string>,
directory?: DirectoryDomainDTO,
networkShare?: NetworkShareDTO
2026-10-05 11:13:51 +00:00
): ResourceDTO {
return {
2026-10-20 11:20:22 +00:00
...(directory ? { directory } : {}),
...(networkShare ? { networkShare } : {}),
2026-10-05 11:13:51 +00:00
id: resource.id.toPrimitive(),
companyId: resource.companyId.toPrimitive(),
specification: resource.specification.toPrimitive(),
values: resource.values.toPrimitive(),
history: resource.history.map((revision) => ({
id: revision.id.toPrimitive(),
values: revision.values.toPrimitive(),
...(revision.specification.equals(resource.specification)
? {}
: { specification: revision.specification.toPrimitive() }),
2026-10-05 11:13:51 +00:00
actorId: revision.actorId.toPrimitive(),
actorName: actors.get(revision.actorId.toPrimitive()) ?? revision.actorId.toPrimitive(),
recordedAt: revision.recordedAt,
})),
};
}