Ergänzung Datenschutzerklärung und Impressum, Fristenformular in Einstellungen
This commit is contained in:
@@ -38,6 +38,7 @@ from app.models import (
|
||||
User,
|
||||
UserSession,
|
||||
)
|
||||
from app.runtime_settings import get_duration
|
||||
from app.security import utcnow
|
||||
from app.users import deactivate, delete_user, months_setting
|
||||
|
||||
@@ -45,10 +46,19 @@ log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def run_cleanup(db: Session) -> dict[str, int]:
|
||||
"""Räumt auf und gibt zurück, was entfernt wurde."""
|
||||
"""Räumt auf und gibt zurück, was entfernt wurde.
|
||||
|
||||
Alle Fristen kommen aus der Laufzeitkonfiguration, damit das, was
|
||||
hier geschieht, dem entspricht, was in der Verwaltung steht - und
|
||||
dem, was die Datenschutzerklärung behauptet.
|
||||
"""
|
||||
now = utcnow()
|
||||
counts: dict[str, int] = {}
|
||||
|
||||
deleted_days = get_duration(db, "cleanup_deleted_days")
|
||||
ops_days = get_duration(db, "cleanup_ops_days")
|
||||
product_days = get_duration(db, "product_cache_days")
|
||||
|
||||
def purge(model, condition, label: str) -> None:
|
||||
result = db.execute(delete(model).where(condition))
|
||||
if result.rowcount:
|
||||
@@ -79,34 +89,33 @@ def run_cleanup(db: Session) -> dict[str, int]:
|
||||
# längst über die Wiederholungsgrenze hinaus versucht.
|
||||
purge(
|
||||
AppliedOp,
|
||||
AppliedOp.created_at < now - timedelta(days=settings.cleanup_ops_days),
|
||||
AppliedOp.created_at < now - timedelta(days=ops_days),
|
||||
"Outbox-Quittungen",
|
||||
)
|
||||
|
||||
# --- Abgelaufene Einladungen und öffentliche Links ---
|
||||
purge(
|
||||
ListInvite,
|
||||
ListInvite.expires_at < now - timedelta(days=settings.cleanup_deleted_days),
|
||||
ListInvite.expires_at < now - timedelta(days=deleted_days),
|
||||
"alte Einladungen",
|
||||
)
|
||||
purge(
|
||||
PublicShare,
|
||||
PublicShare.expires_at < now - timedelta(days=settings.cleanup_deleted_days),
|
||||
PublicShare.expires_at < now - timedelta(days=deleted_days),
|
||||
"abgelaufene öffentliche Links",
|
||||
)
|
||||
|
||||
# --- Produktzwischenspeicher ---
|
||||
purge(
|
||||
ProductCache,
|
||||
ProductCache.fetched_at
|
||||
< now - timedelta(days=max(settings.product_cache_days * 2, 365)),
|
||||
ProductCache.fetched_at < now - timedelta(days=max(product_days * 2, 365)),
|
||||
"Produktzwischenspeicher",
|
||||
)
|
||||
|
||||
# --- Endgültiges Löschen weicher Löschungen ---
|
||||
# Erst jetzt verschwinden die Daten wirklich. Bis dahin konnten
|
||||
# offline gebliebene Geräte erfahren, dass es sie nicht mehr gibt.
|
||||
cutoff = now - timedelta(days=settings.cleanup_deleted_days)
|
||||
cutoff = now - timedelta(days=deleted_days)
|
||||
|
||||
purge(ListItem, ListItem.deleted_at < cutoff, "gelöschte Einträge")
|
||||
|
||||
@@ -135,7 +144,7 @@ def run_cleanup(db: Session) -> dict[str, int]:
|
||||
# --- Abgeschlossene Adressänderungen ---
|
||||
purge(
|
||||
EmailChange,
|
||||
EmailChange.expires_at < now - timedelta(days=settings.cleanup_deleted_days),
|
||||
EmailChange.expires_at < now - timedelta(days=deleted_days),
|
||||
"alte Adressänderungen",
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user