Files
plantillas-proyectos/backend/api/v1/modules/a76/manifests/driver/routes.py
2026-02-09 08:42:02 -06:00

99 lines
3.7 KiB
Python

from typing import List, Optional, Dict, Any
from fastapi import APIRouter, Depends, Query, HTTPException
from sqlalchemy.orm import Session
from core.database import get_core_db
from core.security import get_current_user, validate_access_to_resource
from .dtos import (
ManifestDriverCreateDTO,
ManifestDriverUpdateDTO,
ManifestDriverResponseDTO,
ManifestDriverListDTO,
)
from .service import ManifestDriverService
router = APIRouter(prefix="/manifest-drivers")
@router.get("/", response_model=ManifestDriverListDTO)
async def list_manifest_drivers(
company_id: int = Query(..., description="Company ID"),
manifest_number: Optional[str] = Query(None, description="Filter by Manifest Number"),
search: Optional[str] = Query(None, description="Search term"),
skip: int = Query(0, ge=0),
limit: int = Query(100, ge=1, le=1000),
db: Session = Depends(get_core_db),
current_user: Dict[str, Any] = Depends(get_current_user),
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
filters = {"manifest_number": manifest_number, "search": search}
items, total = ManifestDriverService.get_all(
db, tenant_id, company_id, skip=skip, limit=limit, filters=filters
)
return {
"items": [ManifestDriverResponseDTO.model_validate(item) for item in items],
"total": total,
"page": (skip // limit) + 1,
"page_size": limit,
}
@router.post("/", response_model=ManifestDriverResponseDTO)
async def create_manifest_driver(
data: ManifestDriverCreateDTO,
company_id: int = Query(..., description="Company ID"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
return ManifestDriverService.create(db, data, tenant_id, company_id)
@router.get("/{manifest_number}/{driver_name}", response_model=ManifestDriverResponseDTO)
async def get_manifest_driver(
manifest_number: str,
driver_name: str,
company_id: int = Query(..., description="Company ID"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
item = ManifestDriverService.get_by_pk(db, manifest_number, driver_name, tenant_id, company_id)
if not item:
raise HTTPException(status_code=404, detail="Manifest Driver not found")
return item
@router.patch("/{manifest_number}/{driver_name}", response_model=ManifestDriverResponseDTO)
async def update_manifest_driver(
manifest_number: str,
driver_name: str,
data: ManifestDriverUpdateDTO,
company_id: int = Query(..., description="Company ID"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
item = ManifestDriverService.update(
db, manifest_number, driver_name, tenant_id, company_id, data
)
if not item:
raise HTTPException(status_code=404, detail="Manifest Driver not found")
return item
@router.delete("/{manifest_number}/{driver_name}", response_model=bool)
async def delete_manifest_driver(
manifest_number: str,
driver_name: str,
company_id: int = Query(..., description="Company ID"),
db: Session = Depends(get_core_db),
current_user: dict = Depends(get_current_user),
):
tenant_id = validate_access_to_resource(db, company_id, current_user)
success = ManifestDriverService.delete(db, manifest_number, driver_name, tenant_id, company_id)
if not success:
raise HTTPException(status_code=404, detail="Manifest Driver not found")
return success