jebin2's picture
bk ser
be85b16
# Example usage in routes and app.py
"""
In app.py (startup):
from services.drive_service import DriveService
from services.backup_service import initialize_backup_service
drive_service = DriveService()
backup_service = initialize_backup_service(
drive_service,
min_interval_seconds=30 # 30 seconds between backups
)
In routes (e.g., payments.py):
from fastapi import BackgroundTasks
from services.backup_service import get_backup_service
@router.post("/verify")
async def verify_payment(background_tasks: BackgroundTasks, ...):
# ... payment logic ...
# Trigger backup in background (non-blocking)
backup_service = get_backup_service()
background_tasks.add_task(backup_service.backup_async)
return {"success": True}
In app.py (shutdown):
from services.backup_service import get_backup_service
@app.on_event("shutdown")
async def shutdown():
backup_service = get_backup_service()
# Force backup on shutdown (ignore debouncing)
await backup_service.backup_async(force=True)
How it works:
1. User A pays β†’ backup starts in background
2. User B pays (1s later) β†’ sees backup in progress, skips
3. User C pays (2s later) β†’ sees backup in progress, skips
4. Backup completes (5s)
5. User D pays (10s after first) β†’ only 10s elapsed, skips (debounce)
6. User E pays (35s after first) β†’ 35s > 30s, new backup starts!
Benefits:
- βœ… No concurrent uploads
- βœ… Response returns immediately
- βœ… Minimal Drive API usage
- βœ… No wasted resources
"""