File size: 1,255 Bytes
cccf200
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
"""
Sync API endpoint for offline change synchronization.
"""
from fastapi import APIRouter, Depends, status
from sqlmodel import Session
from src.db.session import get_session
from src.models.sync_operation import SyncRequest, SyncResponse
from src.models.user import User
from src.services.sync_service import SyncService
from src.middleware.auth import get_current_user

router = APIRouter(prefix="/sync", tags=["sync"])


@router.post("/", response_model=SyncResponse)
def sync_offline_changes(
    sync_request: SyncRequest,
    session: Session = Depends(get_session),
    current_user: User = Depends(get_current_user)
):
    """
    Synchronize offline changes from client to server.

    Args:
        sync_request: Sync request containing pending operations
        session: Database session
        current_user: Authenticated user

    Returns:
        SyncResponse: Sync results with conflicts and server updates
    """
    result = SyncService.sync_operations(
        session,
        current_user.id,
        sync_request.operations
    )

    return SyncResponse(
        success=result["success"],
        synced_count=result["synced_count"],
        conflicts=result["conflicts"],
        server_updates=result["server_updates"]
    )