rebreak-monorepo/backend/server/api/chat/delete-message.post.ts
chahinebrini 69f01c5a0c feat(chat): DM-Reaktionen + Soft-Delete Backend + comment_likes realtime
- db/chat: getDmHistory liefert reactions + deletedAt; toggleDmReaction
  (WA-Toggle) + softDeleteDmMessage (nur eigene)
- Endpoints: /api/chat/reaction (Emoji-Toggle, 7er-Allowlist) +
  /api/chat/delete-message (Soft-Delete für alle)
- dm/[userId].get: aggregierte reactions + deleted im Response, Inhalt bei
  Tombstone geblankt
- Migration: comment_likes zur supabase_realtime-Publication (fixt
  Post-Kommentar-Like-Realtime, eskaliert von rebreak-native-ui)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-05-30 11:18:32 +02:00

28 lines
938 B
TypeScript

import { softDeleteDmMessage } from "../../db/chat";
/**
* POST /api/chat/delete-message
* Soft-Delete (Tombstone "Nachricht gelöscht") einer eigenen DM — für alle.
* Body: { messageId }. Nur der Absender darf löschen (im Helper geprüft).
* Die UPDATE auf direct_messages.deleted_at propagiert via Supabase-Realtime
* an die Gegenseite. Group-Chat ist in diesem Release nicht aktiv (nur DM).
*/
export default defineEventHandler(async (event) => {
const user = await requireUser(event);
const body = await readBody(event);
const messageId = body?.messageId as string | undefined;
if (!messageId) {
throw createError({ statusCode: 400, message: "messageId erforderlich" });
}
const deleted = await softDeleteDmMessage(user.id, messageId);
if (!deleted) {
throw createError({
statusCode: 403,
message: "Nachricht nicht gefunden oder nicht deine",
});
}
return { deleted: true };
});