4d697692e0
Co-authored-by: Cursor <cursoragent@cursor.com>
36 lines
906 B
Python
36 lines
906 B
Python
"""Periodic cleanup of expired and burned items."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from datetime import datetime
|
|
|
|
from sqlalchemy import or_, select
|
|
from sqlalchemy.orm import Session
|
|
|
|
from app.models import Item
|
|
from app.services import items as items_service
|
|
|
|
|
|
def run_once(db: Session, *, now: datetime | None = None) -> int:
|
|
"""Delete expired rows (+ files) and burned rows (leftover files).
|
|
|
|
Returns the number of item rows removed.
|
|
"""
|
|
now = now or datetime.utcnow()
|
|
rows = list(
|
|
db.scalars(
|
|
select(Item).where(
|
|
or_(
|
|
Item.burned.is_(True),
|
|
(Item.expires_at.is_not(None) & (Item.expires_at <= now)),
|
|
)
|
|
)
|
|
).all()
|
|
)
|
|
for item in rows:
|
|
items_service.delete_item_file(item)
|
|
db.delete(item)
|
|
if rows:
|
|
db.commit()
|
|
return len(rows)
|