summaryrefslogtreecommitdiff
path: root/src/srht_contrib/utils/retention.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/srht_contrib/utils/retention.py')
-rw-r--r--src/srht_contrib/utils/retention.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/srht_contrib/utils/retention.py b/src/srht_contrib/utils/retention.py
new file mode 100644
index 0000000..5018b32
--- /dev/null
+++ b/src/srht_contrib/utils/retention.py
@@ -0,0 +1,17 @@
+from __future__ import annotations
+
+from datetime import UTC, datetime, timedelta
+
+from sqlalchemy import delete
+from sqlalchemy.orm import Session
+
+from srht_contrib.models import ContributionEvent
+
+
+RETENTION_DAYS = 365
+
+
+def prune_contribution_events(db: Session, *, now: datetime | None = None) -> int:
+ cutoff = (now or datetime.now(tz=UTC)) - timedelta(days=RETENTION_DAYS)
+ result = db.execute(delete(ContributionEvent).where(ContributionEvent.occurred_at < cutoff))
+ return int(result.rowcount or 0)