33 lines
1.1 KiB
TypeScript
33 lines
1.1 KiB
TypeScript
|
|
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,
|
||
|
|
})),
|
||
|
|
};
|
||
|
|
}
|