Soft-Delete: Beiträge als [deleted] erhalten statt löschen
- entry.deleted; entrySelect LEFT JOIN + COALESCE(username)
- POST /entry/{pid}/delete: deleted=1, Inhalt/Bild/Autor geleert, Zeile bleibt
- Konto-Löschung soft-deletet die eigenen Beiträge (statt hartem DELETE),
damit fremde Antworten nicht verwaisen
- Frontend: [deleted]-Platzhalter im Feed, Löschen-Button auf Focus-Seite
- notes/migrations.md: ALTER TABLE deleted
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+14
-3
@@ -35,9 +35,20 @@ async function load() {
|
||||
focus.innerHTML = "";
|
||||
focus.appendChild(renderEntry(data.entry));
|
||||
|
||||
// Reply-Box nur eingeloggt zeigen.
|
||||
const h = await api.get("/auth/headerbar");
|
||||
document.getElementById("reply-box").hidden = !h.loggedin;
|
||||
// Eingeloggt? Reply-Box zeigen; eigener, nicht gelöschter Beitrag -> Löschen-Button.
|
||||
const me = await api.get("/user/info");
|
||||
document.getElementById("reply-box").hidden = !me.uid;
|
||||
if (me.uid === data.entry.uid && !data.entry.deleted) {
|
||||
const btn = document.createElement("button");
|
||||
btn.textContent = "Löschen";
|
||||
btn.addEventListener("click", async () => {
|
||||
if (!confirm("Beitrag wirklich löschen?")) return;
|
||||
const res = await api.post(`/entry/${pid}/delete`, new FormData());
|
||||
if (res.ok) load();
|
||||
else alert(res.data.error || "Löschen fehlgeschlagen.");
|
||||
});
|
||||
focus.appendChild(btn);
|
||||
}
|
||||
|
||||
// Direkte Antworten.
|
||||
const replies = document.getElementById("replies");
|
||||
|
||||
Reference in New Issue
Block a user