feature/catalogo-driver
This commit is contained in:
@@ -36,6 +36,33 @@ class DriverCreateDTO(DriverBaseDTO):
|
||||
pass
|
||||
|
||||
|
||||
class DriverUpdateDTO(BaseModel):
|
||||
"""All fields optional; transporter_key, line, company_id, tenant_id are not updated."""
|
||||
|
||||
driver_name: Optional[str] = None
|
||||
license_number: Optional[str] = None
|
||||
express_line_id: Optional[str] = None
|
||||
ace_id: Optional[str] = None
|
||||
birth_date: Optional[int] = None
|
||||
gender: Optional[str] = None
|
||||
birth_country: Optional[str] = None
|
||||
hazardous_material_auth: Optional[str] = None
|
||||
hazardous_material_state: Optional[str] = None
|
||||
first_name: Optional[str] = None
|
||||
last_name: Optional[str] = None
|
||||
id_key1: Optional[str] = None
|
||||
id_number1: Optional[str] = None
|
||||
id_state1: Optional[str] = None
|
||||
id_country1: Optional[str] = None
|
||||
id_key2: Optional[str] = None
|
||||
id_number2: Optional[str] = None
|
||||
id_state2: Optional[str] = None
|
||||
id_country2: Optional[str] = None
|
||||
badge_number: Optional[str] = None
|
||||
class_type: Optional[str] = None
|
||||
unique_badge_number: Optional[str] = None
|
||||
|
||||
|
||||
class DriverResponseDTO(DriverBaseDTO):
|
||||
class Config:
|
||||
from_attributes = True
|
||||
|
||||
@@ -5,7 +5,7 @@ from core.security import get_current_user, validate_access_to_resource
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query, status
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from .dto import DriverCreateDTO, DriverResponseDTO
|
||||
from .dto import DriverCreateDTO, DriverResponseDTO, DriverUpdateDTO
|
||||
from .models import Driver
|
||||
from .services import DriverService
|
||||
from api.v1.modules.a76.layouts_csv.drivers.routes import router as imports_router
|
||||
@@ -66,6 +66,29 @@ async def create_driver(
|
||||
return DriverService.create_driver(db, driver_data)
|
||||
|
||||
|
||||
@router.put("/{transporter_key}/{line}", response_model=DriverResponseDTO)
|
||||
async def update_driver(
|
||||
transporter_key: str,
|
||||
line: int,
|
||||
driver_data: DriverUpdateDTO,
|
||||
company_id: int = Query(..., description="Company ID for filtering"),
|
||||
db: Session = Depends(get_core_db),
|
||||
current_user: dict = Depends(get_current_user),
|
||||
):
|
||||
tenant_id = validate_access_to_resource(db, company_id, current_user)
|
||||
driver = DriverService.update_driver(
|
||||
db,
|
||||
transporter_key,
|
||||
line,
|
||||
str(company_id),
|
||||
tenant_id,
|
||||
driver_data,
|
||||
)
|
||||
if not driver:
|
||||
raise HTTPException(status_code=404, detail="Driver not found")
|
||||
return driver
|
||||
|
||||
|
||||
@router.delete("/{transporter_key}/{line}", status_code=status.HTTP_204_NO_CONTENT)
|
||||
async def delete_driver(
|
||||
transporter_key: str,
|
||||
|
||||
@@ -40,6 +40,27 @@ class DriverService:
|
||||
db.refresh(new_driver)
|
||||
return new_driver
|
||||
|
||||
@staticmethod
|
||||
def update_driver(
|
||||
db: Session,
|
||||
transporter_key: str,
|
||||
line: int,
|
||||
company_id: str,
|
||||
tenant_id: Optional[str],
|
||||
data: dto.DriverUpdateDTO,
|
||||
) -> Optional[models.Driver]:
|
||||
driver = DriverService.get_driver_by_key_and_line(
|
||||
db, transporter_key, line, company_id, tenant_id
|
||||
)
|
||||
if not driver:
|
||||
return None
|
||||
update_data = data.model_dump(exclude_unset=True)
|
||||
for key, value in update_data.items():
|
||||
setattr(driver, key, value)
|
||||
db.commit()
|
||||
db.refresh(driver)
|
||||
return driver
|
||||
|
||||
@staticmethod
|
||||
def delete_driver(
|
||||
db: Session,
|
||||
|
||||
Reference in New Issue
Block a user