diff --git a/web/src/lib/components/MessageBox.svelte b/web/src/lib/components/MessageBox.svelte
index 89221c6..9e12ff3 100644
--- a/web/src/lib/components/MessageBox.svelte
+++ b/web/src/lib/components/MessageBox.svelte
@@ -412,8 +412,9 @@
{/if}
{/if}
{#if message.metadata?.ai_action}
- {@const promptInfo = aiPrompts.find(p => p.action === message.metadata?.ai_action)}
- {promptInfo?.icon ?? '✨'} {promptInfo?.label ?? message.metadata.ai_action}
+
+ ✨ {message.metadata.ai_label ?? message.metadata.ai_action}{#if message.metadata.ai_model} · {message.metadata.ai_model}{/if}
+
{/if}
{/if}
diff --git a/web/src/lib/types/message.ts b/web/src/lib/types/message.ts
index ffdf940..72f0154 100644
--- a/web/src/lib/types/message.ts
+++ b/web/src/lib/types/message.ts
@@ -28,6 +28,8 @@ export interface MessageData {
ai_processing?: boolean;
ai_processed?: boolean;
ai_action?: string;
+ ai_label?: string;
+ ai_model?: string;
} | null;
}
diff --git a/web/src/routes/api/channels/[id]/messages/+server.ts b/web/src/routes/api/channels/[id]/messages/+server.ts
index af3de9d..8716f06 100644
--- a/web/src/routes/api/channels/[id]/messages/+server.ts
+++ b/web/src/routes/api/channels/[id]/messages/+server.ts
@@ -22,7 +22,7 @@ export const GET: RequestHandler = async ({ params, url, locals }) => {
const rows = after
? await sql`
SELECT m.id, m.channel_id, m.body, m.message_type, m.title,
- m.pinned, m.visibility, m.created_at, m.updated_at, m.reply_to,
+ m.pinned, m.visibility, m.created_at, m.updated_at, m.reply_to, m.metadata,
u.display_name as author_name, u.authentik_id as author_id,
(SELECT count(*)::int FROM messages r WHERE r.reply_to = m.id) as reply_count,
pm.body as parent_body, pu.display_name as parent_author_name,
@@ -44,7 +44,7 @@ export const GET: RequestHandler = async ({ params, url, locals }) => {
`
: await sql`
SELECT m.id, m.channel_id, m.body, m.message_type, m.title,
- m.pinned, m.visibility, m.created_at, m.updated_at, m.reply_to,
+ m.pinned, m.visibility, m.created_at, m.updated_at, m.reply_to, m.metadata,
u.display_name as author_name, u.authentik_id as author_id,
(SELECT count(*)::int FROM messages r WHERE r.reply_to = m.id) as reply_count,
pm.body as parent_body, pu.display_name as parent_author_name,
@@ -117,7 +117,8 @@ export const GET: RequestHandler = async ({ params, url, locals }) => {
ends_at: m.cal_ends_at ?? null,
all_day: m.cal_all_day ?? false,
color: m.cal_color ?? null
- } : null
+ } : null,
+ metadata: m.metadata ?? null
}));
return json(messages);
diff --git a/web/src/routes/api/messages/[messageId]/reactions/+server.ts b/web/src/routes/api/messages/[messageId]/reactions/+server.ts
index cef1cbe..19e7d12 100644
--- a/web/src/routes/api/messages/[messageId]/reactions/+server.ts
+++ b/web/src/routes/api/messages/[messageId]/reactions/+server.ts
@@ -30,10 +30,15 @@ export const POST: RequestHandler = async ({ params, request, locals }) => {
`;
if (!msg) error(404, 'Melding ikke funnet');
+ // Fjern eventuell eksisterende reaksjon fra denne brukeren (én reaksjon per bruker per melding)
+ await sql`
+ DELETE FROM message_reactions
+ WHERE message_id = ${messageId} AND user_id = ${userId}
+ `;
+
await sql`
INSERT INTO message_reactions (message_id, user_id, reaction)
VALUES (${messageId}, ${userId}, ${reaction})
- ON CONFLICT DO NOTHING
`;
const reactions = await getReactions(messageId, userId);