import type { DirectoryMembershipDTO } from "../../common/directory-memberships"; import { DIRECTORY_MEMBERSHIP_DEFINITION } from "../../common/directory-memberships"; import type { AssetDirectoryMembership } from "../domain/directory-membership.aggregate"; export function buildDirectoryMembershipResponse( item: AssetDirectoryMembership ): DirectoryMembershipDTO { const first = item.history[0]; if (!first) { throw new Error("Pertenencia sin revisión inicial."); } return { typeId: DIRECTORY_MEMBERSHIP_DEFINITION.typeId, id: item.id.toPrimitive(), companyId: item.companyId.toPrimitive(), assetId: item.assetId.toPrimitive(), domainResourceId: item.domainResourceId.toPrimitive(), predecessorId: item.predecessorId.getOrUndefined()?.toPrimitive() ?? null, role: item.values.data.role, createdBy: first.actorId.toPrimitive(), createdAt: first.recordedAt, endedAt: item.values.data.endedAt, history: item.history.map((revision) => ({ id: revision.id.toPrimitive(), values: revision.values.data, actorId: revision.actorId.toPrimitive(), recordedAt: revision.recordedAt, })), }; }