from datetime import UTC, datetime from fastapi import APIRouter, Depends, Query from sqlalchemy.ext.asyncio import AsyncSession from app.db.session import get_db from app.deps import get_tenant_id from app.sync import schemas, service router = APIRouter() @router.get("/full") async def sync_full( tenant_id: str = Depends(get_tenant_id), db: AsyncSession = Depends(get_db), ): tables = await service.get_full(db, tenant_id) return {"tables": tables, "synced_at": datetime.now(UTC).isoformat()} @router.get("/changes") async def sync_changes( since: str = Query(...), tenant_id: str = Depends(get_tenant_id), db: AsyncSession = Depends(get_db), ): tables = await service.get_changes(db, tenant_id, since) return {"tables": tables, "synced_at": datetime.now(UTC).isoformat()} @router.post("/push", response_model=schemas.SyncPushResponse) async def sync_push( data: schemas.SyncPushRequest, tenant_id: str = Depends(get_tenant_id), db: AsyncSession = Depends(get_db), ): result = await service.apply_push( db, tenant_id, [op.model_dump() for op in data.operations] ) return result