diff --git a/web/src/lib/chat/spacetime.svelte.ts b/web/src/lib/chat/spacetime.svelte.ts index 0b80f5d..1b787ab 100644 --- a/web/src/lib/chat/spacetime.svelte.ts +++ b/web/src/lib/chat/spacetime.svelte.ts @@ -102,6 +102,26 @@ export function createSpacetimeChat( } } + async function enrichFromPg() { + try { + const res = await fetch(`/api/channels/${channelId}/messages/metadata`); + if (!res.ok) return; + const data: { id: string; edited_at: string | null; metadata: any }[] = await res.json(); + const lookup = new Map(data.map(d => [d.id, d])); + messages = messages.map(m => { + const meta = lookup.get(m.id); + if (!meta) return m; + return { + ...m, + edited_at: meta.edited_at, + metadata: meta.metadata + }; + }); + } catch { + // Ikke kritisk — meldinger vises uansett + } + } + function connectRealtime() { try { conn = DbConnection.builder() @@ -122,6 +142,8 @@ export function createSpacetimeChat( // Initialload — bygg state fra subscription rebuildReactions(); rebuildMessages(); + // Hent redigeringsstatus fra PG (SpacetimeDB har ikke edited_at/metadata) + enrichFromPg(); }) .onError(() => { console.error('[spacetime] subscription error'); diff --git a/web/src/routes/api/channels/[id]/messages/metadata/+server.ts b/web/src/routes/api/channels/[id]/messages/metadata/+server.ts new file mode 100644 index 0000000..9cc74c9 --- /dev/null +++ b/web/src/routes/api/channels/[id]/messages/metadata/+server.ts @@ -0,0 +1,23 @@ +import { json, error } from '@sveltejs/kit'; +import type { RequestHandler } from './$types'; +import { sql } from '$lib/server/db'; + +/** + * GET /api/channels/:id/messages/metadata + * Returnerer edited_at og metadata for meldinger i kanalen. + * Kun meldinger som faktisk er redigert (edited_at IS NOT NULL). + */ +export const GET: RequestHandler = async ({ params, locals }) => { + if (!locals.workspace || !locals.user) error(401); + + const rows = await sql` + SELECT m.id, m.edited_at, m.metadata + FROM messages m + JOIN nodes n ON n.id = m.id + WHERE m.channel_id = ${params.id}::uuid + AND n.workspace_id = ${locals.workspace.id} + AND m.edited_at IS NOT NULL + `; + + return json(rows); +};