CFInsight / services /cache_service.py
PocketSkye's picture
Deploy FastAPI app
777d84a
Raw
History Blame Contribute Delete
1.11 kB
from datetime import datetime, timedelta
from sqlalchemy.orm import Session
from models.report import Report
class CacheService:
TTL_DAYS = 7
MAX_REPORTS = 1000
BATCH_DELETE = 50
@staticmethod
def is_expired(generated_at: datetime) -> bool:
if not generated_at:
return True
return datetime.utcnow() - generated_at > timedelta(days=CacheService.TTL_DAYS)
@staticmethod
def cleanup(db: Session):
# STEP 1: delete expired reports (>7 days)
cutoff = datetime.utcnow() - timedelta(days=CacheService.TTL_DAYS)
db.query(Report).filter(
Report.generated_at < cutoff
).delete(synchronize_session=False)
db.commit()
# STEP 2: incremental eviction (only 50 at a time)
total = db.query(Report).count()
if total > CacheService.MAX_REPORTS:
old_reports = db.query(Report).order_by(
Report.generated_at.asc()
).limit(CacheService.BATCH_DELETE).all()
for r in old_reports:
db.delete(r)
db.commit()