import { error } from '@sveltejs/kit'; import type { PageServerLoad } from './$types'; import { sql } from '$lib/server/db'; export const load: PageServerLoad = async ({ params, locals }) => { if (!locals.workspace || !locals.user) error(401); const workspace = locals.workspace; const entityId = params.id; // 1. Hent entiteten const [entity] = await sql` SELECT e.id, e.name, e.type, e.aliases, e.avatar_url, n.created_at, n.updated_at FROM entities e JOIN nodes n ON n.id = e.id WHERE e.id = ${entityId} AND n.workspace_id = ${workspace.id} `; if (!entity) error(404, 'Entitet ikke funnet'); // 2. Hent relasjoner (edges) med info om tilkoblede noder const edges = await sql` SELECT ge.id AS edge_id, ge.source_id, ge.target_id, ge.relation_type, ge.confidence, ge.origin, ge.created_at, CASE WHEN ge.source_id = ${entityId} THEN target_e.name ELSE source_e.name END AS connected_name, CASE WHEN ge.source_id = ${entityId} THEN target_e.type ELSE source_e.type END AS connected_type, CASE WHEN ge.source_id = ${entityId} THEN ge.target_id ELSE ge.source_id END AS connected_id, CASE WHEN ge.source_id = ${entityId} THEN 'outgoing' ELSE 'incoming' END AS direction FROM graph_edges ge LEFT JOIN entities source_e ON source_e.id = ge.source_id LEFT JOIN entities target_e ON target_e.id = ge.target_id WHERE ge.workspace_id = ${workspace.id} AND (ge.source_id = ${entityId} OR ge.target_id = ${entityId}) ORDER BY ge.created_at DESC `; // 3. Hent meldinger som nevner denne entiteten (via MENTIONS-edges) const mentions = await sql` SELECT m.id, m.body, m.title, m.message_type, m.created_at, u.display_name AS author_name, c.id AS channel_id FROM graph_edges ge JOIN messages m ON m.id = ge.source_id LEFT JOIN users u ON u.authentik_id = m.author_id LEFT JOIN channels c ON c.id = m.channel_id WHERE ge.target_id = ${entityId} AND ge.relation_type = 'MENTIONS' AND ge.workspace_id = ${workspace.id} ORDER BY m.created_at DESC LIMIT 50 `; return { entity, edges, mentions }; };