Code-Review: tote Stellen entfernt, Umwege vereinfacht

- SQLite-Import, migrate.sh, notes/migrations.md und altes jQuery-Skript entfernt
- Backend: scanEntry/queryEntries statt doppelter Scan-Liste, Feed-Queries
  direkt statt feedWhere, Thread ohne Map-Umweg, gemeinsame Helfer für
  Cookie-Löschen und Mediennamen, usernameTaken
- Frontend: PostForm für Beitrag und Antwort, EntryCard in Deleted/LiveCard
  aufgeteilt, tote CSS-Regeln und Typen entfernt, Strich-Regeln zusammengelegt
- Rechtstexte verlinken /stats; Kommentare ohne Vorgeschichte

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-27 15:03:22 +02:00
co-authored by Claude Opus 5.5
parent d1bd0f5f1d
commit df0cfec132
33 changed files with 235 additions and 933 deletions
+6 -34
View File
@@ -54,13 +54,10 @@ func createUser(username, password string) (int64, error) {
return 0, lastErr
}
// idFromUsername liefert die interne id oder 0, wenn der Nutzer nicht existiert.
func idFromUsername(username string) int64 {
var id int64
if err := db.QueryRow(`SELECT id FROM account WHERE username = $1`, username).Scan(&id); err != nil {
return 0
}
return id
func usernameTaken(username string) bool {
var taken bool
db.QueryRow(`SELECT EXISTS (SELECT 1 FROM account WHERE username = $1)`, username).Scan(&taken)
return taken
}
func handleUserPage(w http.ResponseWriter, r *http.Request) error {
@@ -81,22 +78,6 @@ func handleUserPage(w http.ResponseWriter, r *http.Request) error {
return nil
}
// handleStats liefert die Kennzahlen für die Statuszeile unter dem Titel:
// registrierte Nutzer und nicht-gelöschte Beiträge.
func handleStats(w http.ResponseWriter, r *http.Request) error {
var users, entries int64
if err := db.QueryRow(
`SELECT (SELECT COUNT(*) FROM account), (SELECT COUNT(*) FROM entry WHERE deleted = 0)`).
Scan(&users, &entries); err != nil {
return Internal(err)
}
writeJSON(w, http.StatusOK, map[string]any{
"users": users,
"entries": entries,
})
return nil
}
func handleUserInfo(w http.ResponseWriter, r *http.Request) error {
uid := uidFromContext(r.Context())
@@ -135,7 +116,7 @@ func handleUserRename(w http.ResponseWriter, r *http.Request) error {
if name == current {
return Invalid("user.name_unchanged", "Das ist bereits dein Name.").At("user")
}
if idFromUsername(name) != 0 {
if usernameTaken(name) {
return errUsernameTaken
}
@@ -242,16 +223,7 @@ func handleUserDelete(w http.ResponseWriter, r *http.Request) error {
os.Remove(fp)
}
http.SetCookie(w, &http.Cookie{
Name: "session",
Value: "",
Path: "/",
Expires: time.Unix(0, 0),
MaxAge: -1,
HttpOnly: true,
Secure: isHTTPS(r),
SameSite: http.SameSiteLaxMode,
})
clearSessionCookie(w, r)
writeJSON(w, http.StatusOK, map[string]string{"status": "deleted"})
return nil
}