Admin-side for merge av duplikate entiteter med edge-migrering. Entitetsside med inline redigering, slett, relasjoner og mentions. AI text process worker-handler (fix_text, extract_facts, rewrite, translate) med API-endepunkt som oppretter jobbkø-oppgaver. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
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 };
|
|
};
|