metis-desk/modules/assets/src/api/application/directory-membership-response.builder.ts

33 lines
1.1 KiB
TypeScript
Raw Normal View History

2026-10-20 11:20:22 +00:00
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,
})),
};
}