Resumen del trabajo de hoy: Se agregaron y actualizaron módulos, rutas, servicios y DTOs para las entidades trabajadas hoy, incluyendo Aduanal, Drivers, Trailers, TransportModes, TransportTypes, Transporters, Vehicles, entre otros. Se verificó la presencia de los campos tenant_id y company_id en los modelos relevantes.
This commit is contained in:
37
backend/api/v1/modules/a76/drivers/dto.py
Normal file
37
backend/api/v1/modules/a76/drivers/dto.py
Normal file
@@ -0,0 +1,37 @@
|
||||
from pydantic import BaseModel
|
||||
from typing import Optional
|
||||
|
||||
class DriverBaseDTO(BaseModel):
|
||||
transporter_key: str
|
||||
line: int
|
||||
driver_name: Optional[str]
|
||||
license_number: Optional[str]
|
||||
express_line_id: Optional[str]
|
||||
ace_id: Optional[str]
|
||||
birth_date: Optional[int]
|
||||
gender: Optional[str]
|
||||
birth_country: Optional[str]
|
||||
hazardous_material_auth: Optional[str]
|
||||
hazardous_material_state: Optional[str]
|
||||
first_name: Optional[str]
|
||||
last_name: Optional[str]
|
||||
id_key1: Optional[str]
|
||||
id_number1: Optional[str]
|
||||
id_state1: Optional[str]
|
||||
id_country1: Optional[str]
|
||||
id_key2: Optional[str]
|
||||
id_number2: Optional[str]
|
||||
id_state2: Optional[str]
|
||||
id_country2: Optional[str]
|
||||
badge_number: Optional[str]
|
||||
class_type: Optional[str]
|
||||
unique_badge_number: Optional[str]
|
||||
company_id: str
|
||||
tenant_id: str
|
||||
|
||||
class DriverCreateDTO(DriverBaseDTO):
|
||||
pass
|
||||
|
||||
class DriverResponseDTO(DriverBaseDTO):
|
||||
class Config:
|
||||
orm_mode = True
|
||||
33
backend/api/v1/modules/a76/drivers/models.py
Normal file
33
backend/api/v1/modules/a76/drivers/models.py
Normal file
@@ -0,0 +1,33 @@
|
||||
from sqlalchemy import Column, String, Integer, ForeignKey
|
||||
from core.database import Base
|
||||
|
||||
class Driver(Base):
|
||||
__tablename__ = "driver"
|
||||
__table_args__ = {"schema": "a76"}
|
||||
|
||||
transporter_key = Column(String(5), ForeignKey("a76.transporter.transporter_key", ondelete="CASCADE"), primary_key=True, nullable=False)
|
||||
line = Column(Integer, primary_key=True, nullable=False)
|
||||
driver_name = Column(String(80), nullable=True)
|
||||
license_number = Column(String(29), nullable=True)
|
||||
express_line_id = Column(String(17), nullable=True)
|
||||
ace_id = Column(String(20), nullable=True)
|
||||
birth_date = Column(Integer, nullable=True)
|
||||
gender = Column(String(1), nullable=True)
|
||||
birth_country = Column(String(3), nullable=True)
|
||||
hazardous_material_auth = Column(String(2), nullable=True)
|
||||
hazardous_material_state = Column(String(30), nullable=True)
|
||||
first_name = Column(String(20), nullable=True)
|
||||
last_name = Column(String(20), nullable=True)
|
||||
id_key1 = Column(String(40), nullable=True)
|
||||
id_number1 = Column(String(20), nullable=True)
|
||||
id_state1 = Column(String(30), nullable=True)
|
||||
id_country1 = Column(String(3), nullable=True)
|
||||
id_key2 = Column(String(40), nullable=True)
|
||||
id_number2 = Column(String(20), nullable=True)
|
||||
id_state2 = Column(String(30), nullable=True)
|
||||
id_country2 = Column(String(3), nullable=True)
|
||||
badge_number = Column(String(20), nullable=True)
|
||||
class_type = Column(String(1), nullable=True)
|
||||
unique_badge_number = Column(String(100), nullable=True)
|
||||
company_id = Column(String, ForeignKey("a76.company.id"), nullable=False)
|
||||
tenant_id = Column(String, ForeignKey("a76.tenants.id"), nullable=False)
|
||||
48
backend/api/v1/modules/a76/drivers/routes.py
Normal file
48
backend/api/v1/modules/a76/drivers/routes.py
Normal file
@@ -0,0 +1,48 @@
|
||||
from fastapi import APIRouter, Depends, HTTPException, status
|
||||
from sqlalchemy.orm import Session
|
||||
from typing import List
|
||||
|
||||
from core.database import get_core_db
|
||||
from core.security import get_current_user
|
||||
from .dto import DriverCreateDTO, DriverResponseDTO
|
||||
from .services import DriverService
|
||||
|
||||
router = APIRouter(prefix="/drivers", tags=["Drivers"])
|
||||
|
||||
@router.get("/", response_model=List[DriverResponseDTO])
|
||||
async def list_drivers(
|
||||
db: Session = Depends(get_core_db),
|
||||
current_user: dict = Depends(get_current_user)
|
||||
):
|
||||
return db.query(DriverService).all()
|
||||
|
||||
@router.get("/{transporter_key}/{line}", response_model=DriverResponseDTO)
|
||||
async def read_driver(
|
||||
transporter_key: str,
|
||||
line: int,
|
||||
db: Session = Depends(get_core_db),
|
||||
current_user: dict = Depends(get_current_user)
|
||||
):
|
||||
driver = DriverService.get_driver_by_key_and_line(db, transporter_key, line)
|
||||
if not driver:
|
||||
raise HTTPException(status_code=404, detail="Driver not found")
|
||||
return driver
|
||||
|
||||
@router.post("/", response_model=DriverResponseDTO, status_code=status.HTTP_201_CREATED)
|
||||
async def create_driver(
|
||||
driver_data: DriverCreateDTO,
|
||||
db: Session = Depends(get_core_db),
|
||||
current_user: dict = Depends(get_current_user)
|
||||
):
|
||||
return DriverService.create_driver(db, driver_data)
|
||||
|
||||
@router.delete("/{transporter_key}/{line}", status_code=status.HTTP_204_NO_CONTENT)
|
||||
async def delete_driver(
|
||||
transporter_key: str,
|
||||
line: int,
|
||||
db: Session = Depends(get_core_db),
|
||||
current_user: dict = Depends(get_current_user)
|
||||
):
|
||||
driver = DriverService.delete_driver(db, transporter_key, line)
|
||||
if not driver:
|
||||
raise HTTPException(status_code=404, detail="Driver not found")
|
||||
26
backend/api/v1/modules/a76/drivers/services.py
Normal file
26
backend/api/v1/modules/a76/drivers/services.py
Normal file
@@ -0,0 +1,26 @@
|
||||
from sqlalchemy.orm import Session
|
||||
from . import models, dto
|
||||
|
||||
class DriverService:
|
||||
@staticmethod
|
||||
def get_driver_by_key_and_line(db: Session, transporter_key: str, line: int):
|
||||
return db.query(models.Driver).filter(
|
||||
models.Driver.transporter_key == transporter_key,
|
||||
models.Driver.line == line
|
||||
).first()
|
||||
|
||||
@staticmethod
|
||||
def create_driver(db: Session, driver_data: dto.DriverCreateDTO):
|
||||
new_driver = models.Driver(**driver_data.dict())
|
||||
db.add(new_driver)
|
||||
db.commit()
|
||||
db.refresh(new_driver)
|
||||
return new_driver
|
||||
|
||||
@staticmethod
|
||||
def delete_driver(db: Session, transporter_key: str, line: int):
|
||||
driver = DriverService.get_driver_by_key_and_line(db, transporter_key, line)
|
||||
if driver:
|
||||
db.delete(driver)
|
||||
db.commit()
|
||||
return driver
|
||||
Reference in New Issue
Block a user