retry-failed: only pick open errors and mark them as retried

"Fehlgeschlagene neu einlesen" reported the same 29 mails on every
click: it selected all error log entries ever written and never noted
that one had already been retried.

Error log entries now get retried_at when they are picked up; the
endpoint only considers entries without it. If the mail fails again,
the scheduler writes a new, open error entry, so a second click right
after the first reports 0. The log shows retried errors greyed out
with "↻ erneut versucht <Zeit>", and the result dialog says how many
open error entries and mails were requeued.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-29 12:12:03 +02:00
co-authored by Claude Opus 5.5
parent fbb2fe95c8
commit 360feea42e
5 changed files with 77 additions and 16 deletions
+3
View File
@@ -141,6 +141,9 @@ class FilterLog(Base):
folder: Mapped[str | None] = mapped_column(String(255), nullable=True)
details: Mapped[str | None] = mapped_column(String(2000), nullable=True)
created_at: Mapped[datetime] = mapped_column(DateTime, server_default=func.now(), index=True)
# Fehler-Einträge: Zeitpunkt, zu dem "Fehlgeschlagene neu einlesen" die Mail
# erneut angestoßen hat. Scheitert sie wieder, entsteht ein neuer Eintrag.
retried_at: Mapped[datetime | None] = mapped_column(DateTime, nullable=True)
__table_args__ = (
Index("ix_filter_logs_account_created", "account_id", "created_at"),