File size: 1,624 Bytes
be85b16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# 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
"""