diff --git a/handle_settings.go b/handle_settings.go index 2c39223..9021368 100644 --- a/handle_settings.go +++ b/handle_settings.go @@ -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}) }