from typing import List, Optional from sqlalchemy.orm import Session from . import dto, models class DriverService: @staticmethod def list_drivers( db: Session, company_id: str, tenant_id: Optional[str] = None ) -> List[models.Driver]: query = db.query(models.Driver).filter(models.Driver.company_id == company_id) if tenant_id: query = query.filter(models.Driver.tenant_id == tenant_id) return query.all() @staticmethod def get_driver_by_key_and_line( db: Session, transporter_key: str, line: int, company_id: str, tenant_id: Optional[str] = None, ) -> Optional[models.Driver]: query = db.query(models.Driver).filter( models.Driver.transporter_key == transporter_key, models.Driver.line == line, models.Driver.company_id == company_id, ) if tenant_id: query = query.filter(models.Driver.tenant_id == tenant_id) return query.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, company_id: str, tenant_id: Optional[str] = None, ) -> Optional[models.Driver]: driver = DriverService.get_driver_by_key_and_line( db, transporter_key, line, company_id, tenant_id ) if driver: db.delete(driver) db.commit() return driver