Moderation entfernt, JSON-API unter /api

- Moderationsseite und Melde-Funktion (report) komplett ausgebaut; folgt
  als eigenständiges Projekt
- alle API-Endpunkte unter /api, dort ausschließlich JSON: auch 404, 405,
  Rate-Limit (429) und Panics (500)
- Fehler nur über HTTP-Status; stille DB-Fehler in stats, logout und
  Vote-Zählern liefern jetzt 500 statt Nullen
- /auth/headerbar entfernt (Frontend nutzt /api/user/info)
- Frontend auf /api und statusbasierte Auswertung umgestellt
- notes/api.md neu als Referenz der aktuellen API

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TiXsPUqw7oeomZ8wZrQW5q
This commit is contained in:
irrlicht
2026-09-26 23:10:02 +02:00
co-authored by Claude Opus 5.5
parent 2714fdb1a5
commit 030a5bd943
21 changed files with 430 additions and 726 deletions
+7 -4
View File
@@ -23,13 +23,14 @@ replyForm.addEventListener("submit", async (e) => {
});
async function load() {
const data = await api.get(`/entry/${pid}/thread`);
const res = await api.get(`/entry/${pid}/thread`);
const focus = document.getElementById("focus");
if (data.error) {
focus.textContent = "Beitrag nicht gefunden";
if (!res.ok) {
focus.textContent = errMsg(res.data, "Beitrag konnte nicht geladen werden.");
return;
}
const data = res.data;
// Ahnenkette (Root zuerst), dann der fokussierte Beitrag.
const ancestors = document.getElementById("ancestors");
@@ -40,7 +41,9 @@ async function load() {
focus.appendChild(renderEntry(data.entry));
// Eingeloggt? Reply-Box zeigen; eigener, nicht gelöschter Beitrag -> Bearbeiten/Löschen.
const me = await api.get("/user/info");
// 401 heißt nicht angemeldet -> me bleibt leer.
const meRes = await api.get("/user/info");
const me = meRes.ok ? meRes.data : {};
document.getElementById("reply-box").hidden = !me.uid;
if (me.uid === data.entry.uid && !data.entry.deleted) {
const editBtn = document.createElement("button");