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:
co-authored by
Claude Opus 5.5
parent
d1bd0f5f1d
commit
df0cfec132
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user