import type { DirectoryDomainDTO } from "../../common/directory-domains"; import type { ResourceDTO } from "../../common/inventory"; import type { NetworkShareDTO } from "../../common/network-shares"; import type { Resource } from "../domain/resource.aggregate"; export function buildResourceResponse( resource: Resource, actors: ReadonlyMap, directory?: DirectoryDomainDTO, networkShare?: NetworkShareDTO ): ResourceDTO { return { ...(directory ? { directory } : {}), ...(networkShare ? { networkShare } : {}), 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() }), actorId: revision.actorId.toPrimitive(), actorName: actors.get(revision.actorId.toPrimitive()) ?? revision.actorId.toPrimitive(), recordedAt: revision.recordedAt, })), }; }