- 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>
28 lines
938 B
TypeScript
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 };
|
|
});
|