Files
kandev/apps/web/lib/api/domains/office-activity-normalize.ts
T
2026-05-16 20:07:57 +01:00

43 lines
1.3 KiB
TypeScript

import type { ActivityEntry } from "@/lib/state/slices/office/types";
export type RawActivityEntry = ActivityEntry & {
workspace_id?: string;
actor_type?: ActivityEntry["actorType"];
actor_id?: string;
target_type?: string;
target_id?: string;
run_id?: string;
session_id?: string;
created_at?: string;
};
function parseDetails(details: unknown): Record<string, unknown> | undefined {
if (!details) return undefined;
if (typeof details === "object") return details as Record<string, unknown>;
if (typeof details !== "string") return undefined;
try {
const parsed = JSON.parse(details) as unknown;
return typeof parsed === "object" && parsed !== null
? (parsed as Record<string, unknown>)
: undefined;
} catch {
return undefined;
}
}
export function normalizeActivityEntry(raw: RawActivityEntry): ActivityEntry {
return {
id: raw.id ?? "",
workspaceId: raw.workspaceId ?? raw.workspace_id ?? "",
actorType: raw.actorType ?? raw.actor_type ?? "system",
actorId: raw.actorId ?? raw.actor_id ?? "",
action: raw.action ?? "",
targetType: raw.targetType ?? raw.target_type,
targetId: raw.targetId ?? raw.target_id,
details: parseDetails(raw.details),
runId: raw.runId ?? raw.run_id,
sessionId: raw.sessionId ?? raw.session_id,
createdAt: raw.createdAt ?? raw.created_at ?? "",
};
}