Download brain/app/api/driver_api.py from MouleeswaranM/FairRelay: direct link, hf CLI and curl.
- Browser
- Download file 5.22 kB
-
https://huggingface.co/MouleeswaranM/FairRelay/resolve/refs%2Fpr%2F2/brain/app/api/driver_api.py
- Command line
-
hf download hf://MouleeswaranM/FairRelay@refs/pr/2/brain/app/api/driver_api.py
-
curl -L -o driver_api.py https://huggingface.co/MouleeswaranM/FairRelay/resolve/refs%2Fpr%2F2/brain/app/api/driver_api.py
5.22 kB
| """ | |
| Phase 2 Driver-facing API endpoints. | |
| Handles driver operations: assignments, stats, deliveries, feedback, swaps, issues. | |
| """ | |
| from datetime import date as date_type | |
| from fastapi import APIRouter, Depends, HTTPException, Query, status | |
| from sqlalchemy.ext.asyncio import AsyncSession | |
| from uuid import UUID | |
| from app.database import get_db | |
| from app.schemas.driver_api import ( | |
| TodayAssignmentResponse, | |
| DriverStatsWindowResponse, | |
| DeliveryLogRequest, | |
| DeliveryLogResponse, | |
| RouteSwapRequestCreate, | |
| RouteSwapRequestResponse, | |
| StopIssueRequest, | |
| StopIssueResponse, | |
| ) | |
| from app.services.driver_service import ( | |
| get_today_assignment, | |
| get_driver_stats, | |
| log_delivery, | |
| create_route_swap_request, | |
| create_stop_issue, | |
| ) | |
| router = APIRouter(tags=["Driver"]) | |
| async def get_assignment_today( | |
| driver_id: UUID = Query(..., description="Driver UUID"), | |
| target_date: date_type = Query(default=None, description="Date (defaults to today)"), | |
| db: AsyncSession = Depends(get_db), | |
| ) -> TodayAssignmentResponse: | |
| """Get driver's assignment for today or specified date.""" | |
| actual_date = target_date or date_type.today() | |
| result = await get_today_assignment(db, driver_id, actual_date) | |
| if not result: | |
| raise HTTPException( | |
| status_code=status.HTTP_404_NOT_FOUND, | |
| detail="No assignment found for driver on given date", | |
| ) | |
| return result | |
| async def get_driver_stats_endpoint( | |
| driver_id: UUID, | |
| window_days: int = Query(default=7, ge=1, le=90, description="Days to look back"), | |
| db: AsyncSession = Depends(get_db), | |
| ) -> DriverStatsWindowResponse: | |
| """Get driver stats over time window.""" | |
| result = await get_driver_stats(db, driver_id, window_days) | |
| if not result: | |
| raise HTTPException( | |
| status_code=status.HTTP_404_NOT_FOUND, | |
| detail="Driver not found", | |
| ) | |
| return result | |
| async def log_delivery_endpoint( | |
| request: DeliveryLogRequest, | |
| db: AsyncSession = Depends(get_db), | |
| ) -> DeliveryLogResponse: | |
| """Log a delivery at a stop.""" | |
| try: | |
| result = await log_delivery( | |
| db=db, | |
| assignment_id=request.assignment_id, | |
| route_id=request.route_id, | |
| driver_id=request.driver_id, | |
| stop_order=request.stop_order, | |
| status=request.status, | |
| issue_type=request.issue_type, | |
| package_id=request.package_id, | |
| photo_url=request.photo_url, | |
| signature_data=request.signature_data, | |
| notes=request.notes, | |
| ) | |
| await db.commit() | |
| return result | |
| except ValueError as e: | |
| raise HTTPException( | |
| status_code=status.HTTP_400_BAD_REQUEST, | |
| detail=str(e), | |
| ) | |
| async def create_route_swap_endpoint( | |
| request: RouteSwapRequestCreate, | |
| db: AsyncSession = Depends(get_db), | |
| ) -> RouteSwapRequestResponse: | |
| """Create a route swap request.""" | |
| try: | |
| result = await create_route_swap_request( | |
| db=db, | |
| from_driver_id=request.from_driver_id, | |
| assignment_id=request.assignment_id, | |
| reason=request.reason, | |
| to_driver_id=request.to_driver_id, | |
| preferred_date=request.preferred_date, | |
| ) | |
| await db.commit() | |
| return result | |
| except ValueError as e: | |
| raise HTTPException( | |
| status_code=status.HTTP_400_BAD_REQUEST, | |
| detail=str(e), | |
| ) | |
| async def create_stop_issue_endpoint( | |
| request: StopIssueRequest, | |
| db: AsyncSession = Depends(get_db), | |
| ) -> StopIssueResponse: | |
| """Create a stop issue report.""" | |
| try: | |
| result = await create_stop_issue( | |
| db=db, | |
| assignment_id=request.assignment_id, | |
| route_id=request.route_id, | |
| driver_id=request.driver_id, | |
| stop_order=request.stop_order, | |
| issue_type=request.issue_type, | |
| notes=request.notes, | |
| ) | |
| await db.commit() | |
| return result | |
| except ValueError as e: | |
| raise HTTPException( | |
| status_code=status.HTTP_400_BAD_REQUEST, | |
| detail=str(e), | |
| ) | |