Download brain/app/api/drivers.py from MouleeswaranM/FairRelay: direct link, hf CLI and curl.
- Browser
- Download file 4.33 kB
-
https://huggingface.co/MouleeswaranM/FairRelay/resolve/refs%2Fpr%2F2/brain/app/api/drivers.py
- Command line
-
hf download hf://MouleeswaranM/FairRelay@refs/pr/2/brain/app/api/drivers.py
-
curl -L -o drivers.py https://huggingface.co/MouleeswaranM/FairRelay/resolve/refs%2Fpr%2F2/brain/app/api/drivers.py
4.33 kB
| """ | |
| Drivers API endpoint. | |
| Handles GET /api/v1/drivers/{id} for driver details. | |
| """ | |
| from datetime import date, timedelta | |
| from uuid import UUID | |
| from fastapi import APIRouter, Depends, HTTPException, status | |
| from sqlalchemy import select | |
| from sqlalchemy.ext.asyncio import AsyncSession | |
| from sqlalchemy.orm import selectinload | |
| from app.database import get_db | |
| from app.models import Driver, DriverStatsDaily | |
| from app.schemas.driver import DriverResponse, DriverStatsResponse | |
| router = APIRouter(prefix="/drivers", tags=["Drivers"]) | |
| async def get_driver( | |
| driver_id: UUID, | |
| db: AsyncSession = Depends(get_db), | |
| ) -> DriverResponse: | |
| """Get driver details by ID.""" | |
| # Fetch driver with recent stats | |
| result = await db.execute( | |
| select(Driver) | |
| .where(Driver.id == driver_id) | |
| .options(selectinload(Driver.daily_stats)) | |
| ) | |
| driver = result.scalar_one_or_none() | |
| if not driver: | |
| raise HTTPException( | |
| status_code=status.HTTP_404_NOT_FOUND, | |
| detail=f"Driver with ID {driver_id} not found", | |
| ) | |
| # Get stats for last 7 days | |
| seven_days_ago = date.today() - timedelta(days=7) | |
| recent_stats = [ | |
| DriverStatsResponse( | |
| date=stat.date, | |
| avg_workload_score=stat.avg_workload_score, | |
| total_routes=stat.total_routes, | |
| gini_contribution=stat.gini_contribution, | |
| reported_stress_level=stat.reported_stress_level, | |
| reported_fairness_score=stat.reported_fairness_score, | |
| ) | |
| for stat in driver.daily_stats | |
| if stat.date >= seven_days_ago | |
| ] | |
| # Sort by date descending | |
| recent_stats.sort(key=lambda x: x.date, reverse=True) | |
| return DriverResponse( | |
| id=driver.id, | |
| external_id=driver.external_id, | |
| name=driver.name, | |
| phone=driver.phone, | |
| whatsapp_number=driver.whatsapp_number, | |
| preferred_language=driver.preferred_language.value, | |
| vehicle_type=driver.vehicle_type.value, | |
| vehicle_capacity_kg=driver.vehicle_capacity_kg, | |
| license_number=driver.license_number, | |
| created_at=driver.created_at, | |
| updated_at=driver.updated_at, | |
| recent_stats=recent_stats, | |
| ) | |
| async def get_driver_by_external_id( | |
| external_id: str, | |
| db: AsyncSession = Depends(get_db), | |
| ) -> DriverResponse: | |
| """Get driver details by external ID.""" | |
| result = await db.execute( | |
| select(Driver) | |
| .where(Driver.external_id == external_id) | |
| .options(selectinload(Driver.daily_stats)) | |
| ) | |
| driver = result.scalar_one_or_none() | |
| if not driver: | |
| raise HTTPException( | |
| status_code=status.HTTP_404_NOT_FOUND, | |
| detail=f"Driver with external ID {external_id} not found", | |
| ) | |
| # Get stats for last 7 days | |
| seven_days_ago = date.today() - timedelta(days=7) | |
| recent_stats = [ | |
| DriverStatsResponse( | |
| date=stat.date, | |
| avg_workload_score=stat.avg_workload_score, | |
| total_routes=stat.total_routes, | |
| gini_contribution=stat.gini_contribution, | |
| reported_stress_level=stat.reported_stress_level, | |
| reported_fairness_score=stat.reported_fairness_score, | |
| ) | |
| for stat in driver.daily_stats | |
| if stat.date >= seven_days_ago | |
| ] | |
| recent_stats.sort(key=lambda x: x.date, reverse=True) | |
| return DriverResponse( | |
| id=driver.id, | |
| external_id=driver.external_id, | |
| name=driver.name, | |
| phone=driver.phone, | |
| whatsapp_number=driver.whatsapp_number, | |
| preferred_language=driver.preferred_language.value, | |
| vehicle_type=driver.vehicle_type.value, | |
| vehicle_capacity_kg=driver.vehicle_capacity_kg, | |
| license_number=driver.license_number, | |
| created_at=driver.created_at, | |
| updated_at=driver.updated_at, | |
| recent_stats=recent_stats, | |
| ) | |