Switched to soft-deletion for client-sync event handling.

This commit is contained in:
Pen Anderson 2026-03-03 20:14:56 -06:00
parent 4bba0ed3a0
commit f30b84aa3a

View file

@ -80,57 +80,62 @@ func (app *App) handleUpdateSettings(w http.ResponseWriter, r *http.Request) {
}
func (app *App) handleResetAttendees(w http.ResponseWriter, r *http.Request) {
result, err := app.db.Exec(`DELETE FROM attendees`)
ts := now()
result, err := app.db.Exec(`UPDATE attendees SET deleted_at=?, updated_at=? WHERE deleted_at IS NULL`, ts, ts)
if err != nil {
writeError(w, err.Error(), http.StatusInternalServerError)
return
}
n, _ := result.RowsAffected()
writeJSON(w, map[string]any{"deleted": n})
}
func (app *App) handleResetVolunteers(w http.ResponseWriter, r *http.Request) {
result, err := app.db.Exec(`DELETE FROM volunteers`)
ts := now()
result, err := app.db.Exec(`UPDATE volunteers SET deleted_at=?, updated_at=? WHERE deleted_at IS NULL`, ts, ts)
if err != nil {
writeError(w, err.Error(), http.StatusInternalServerError)
return
}
n, _ := result.RowsAffected()
writeJSON(w, map[string]any{"deleted": n})
}
func (app *App) handleResetShifts(w http.ResponseWriter, r *http.Request) {
result, err := app.db.Exec(`DELETE FROM shifts`)
ts := now()
result, err := app.db.Exec(`UPDATE shifts SET deleted_at=?, updated_at=? WHERE deleted_at IS NULL`, ts, ts)
if err != nil {
writeError(w, err.Error(), http.StatusInternalServerError)
return
}
n, _ := result.RowsAffected()
// Also soft-delete orphaned volunteer_shifts
app.db.Exec(`UPDATE volunteer_shifts SET deleted_at=?, updated_at=? WHERE deleted_at IS NULL AND shift_id IN (SELECT id FROM shifts WHERE deleted_at IS NOT NULL)`, ts, ts)
writeJSON(w, map[string]any{"deleted": n})
}
func (app *App) handleResetDepartments(w http.ResponseWriter, r *http.Request) {
result, err := app.db.Exec(`DELETE FROM departments`)
ts := now()
// Soft-delete shifts in these departments first (so sync picks them up)
app.db.Exec(`UPDATE volunteer_shifts SET deleted_at=?, updated_at=? WHERE deleted_at IS NULL AND shift_id IN (SELECT id FROM shifts WHERE department_id IN (SELECT id FROM departments WHERE deleted_at IS NULL))`, ts, ts)
app.db.Exec(`UPDATE shifts SET deleted_at=?, updated_at=? WHERE deleted_at IS NULL AND department_id IN (SELECT id FROM departments WHERE deleted_at IS NULL)`, ts, ts)
result, err := app.db.Exec(`UPDATE departments SET deleted_at=?, updated_at=? WHERE deleted_at IS NULL`, ts, ts)
if err != nil {
writeError(w, err.Error(), http.StatusInternalServerError)
return
}
n, _ := result.RowsAffected()
writeJSON(w, map[string]any{"deleted": n})
}
func (app *App) handleResetVolunteerShifts(w http.ResponseWriter, r *http.Request) {
result, err := app.db.Exec(`DELETE FROM volunteer_shifts`)
ts := now()
result, err := app.db.Exec(`UPDATE volunteer_shifts SET deleted_at=?, updated_at=? WHERE deleted_at IS NULL`, ts, ts)
if err != nil {
writeError(w, err.Error(), http.StatusInternalServerError)
return
}
n, _ := result.RowsAffected()
writeJSON(w, map[string]any{"deleted": n})
}