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:
@@ -111,8 +111,10 @@ func handleUserRename(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
// handleUserDelete löscht den eingeloggten Account dauerhaft, nach Bestätigung
|
||||
// durch das Passwort (Formularfeld pass1). Beiträge, Votes und Sessions werden
|
||||
// in einer Transaktion mitgelöscht; zugehörige Mediendateien best effort entfernt.
|
||||
// durch das Passwort (Formularfeld pass1). Sessions und Votes werden in einer
|
||||
// Transaktion mitgelöscht; die eigenen Beiträge werden soft-gelöscht (als
|
||||
// [deleted]-Platzhalter erhalten), damit fremde Antworten nicht verwaisen.
|
||||
// Zugehörige Mediendateien werden best effort entfernt.
|
||||
func handleUserDelete(w http.ResponseWriter, r *http.Request) {
|
||||
uid := uidFromContext(r.Context())
|
||||
|
||||
@@ -127,7 +129,7 @@ func handleUserDelete(w http.ResponseWriter, r *http.Request) {
|
||||
return
|
||||
}
|
||||
|
||||
// Mediendateien der Beiträge einsammeln, bevor die Zeilen verschwinden.
|
||||
// Mediendateien der Beiträge einsammeln, bevor die Pfade geleert werden.
|
||||
var media []string
|
||||
if rows, err := db.Query(`SELECT filepath FROM entry WHERE uid = ?`, uid); err == nil {
|
||||
for rows.Next() {
|
||||
@@ -147,7 +149,7 @@ func handleUserDelete(w http.ResponseWriter, r *http.Request) {
|
||||
for _, q := range []string{
|
||||
`DELETE FROM session WHERE uid = ?`,
|
||||
`DELETE FROM vote WHERE uid = ?`,
|
||||
`DELETE FROM entry WHERE uid = ?`,
|
||||
`UPDATE entry SET deleted = 1, content = '', filepath = '', uid = 0 WHERE uid = ?`,
|
||||
`DELETE FROM user WHERE uid = ?`,
|
||||
} {
|
||||
if _, err := tx.Exec(q, uid); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user