23 lines
949 B
TypeScript
23 lines
949 B
TypeScript
|
|
import type { AccessResponseDTO } from "../../common/dto/shared/access.dto";
|
||
|
|
import { projectAccess } from "../domain/access/access-projection";
|
||
|
|
|
||
|
|
import type { AccessSnapshot } from "./access.repository";
|
||
|
|
export function buildAccessResponse(snapshot: AccessSnapshot): AccessResponseDTO {
|
||
|
|
const items = [...snapshot.context.catalog, ...snapshot.workspace.items];
|
||
|
|
return {
|
||
|
|
items: items.map((item) => ({
|
||
|
|
id: item.id.toPrimitive(),
|
||
|
|
companyId: item.companyId.getOrUndefined()?.toPrimitive() ?? null,
|
||
|
|
values: item.values.data,
|
||
|
|
history: item.history.map((revision) => ({
|
||
|
|
id: revision.id.toPrimitive(),
|
||
|
|
actorId: revision.actorId.toPrimitive(),
|
||
|
|
actorName: snapshot.actors.get(revision.actorId.toPrimitive()) ?? "—",
|
||
|
|
recordedAt: revision.recordedAt,
|
||
|
|
values: revision.values.data,
|
||
|
|
})),
|
||
|
|
})),
|
||
|
|
...projectAccess(items, snapshot.context.people, snapshot.context.today),
|
||
|
|
};
|
||
|
|
}
|