70 lines
2.5 KiB
Python
70 lines
2.5 KiB
Python
from typing import List, Optional
|
|
from sqlalchemy.orm import Session
|
|
from app.core.entities.truck import TruckEntity
|
|
from app.infrastructure.database.models.trucks import Truck
|
|
from app.infrastructure.database.repository.truck_repository import TrucksRepository
|
|
|
|
|
|
class TrucksService:
|
|
def __init__(self, db: Session):
|
|
self.repository = TrucksRepository(db)
|
|
|
|
def get_all_trucks(self) -> List[TruckEntity]:
|
|
trucks = self.repository.get_all()
|
|
return [
|
|
TruckEntity(
|
|
id=truck.id,
|
|
name=truck.name,
|
|
capacity=truck.capacity,
|
|
volume=truck.volume,
|
|
delivery_orders=[do.id for do in truck.delivery_orders] if truck.delivery_orders else []
|
|
)
|
|
for truck in trucks
|
|
]
|
|
|
|
def get_truck_by_id(self, truck_id: int) -> Optional[TruckEntity]:
|
|
truck = self.repository.get_by_id(truck_id)
|
|
if truck:
|
|
return TruckEntity(
|
|
id=truck.id,
|
|
name=truck.name,
|
|
capacity=truck.capacity,
|
|
volume=truck.volume,
|
|
delivery_orders=[do.id for do in truck.delivery_orders] if truck.delivery_orders else []
|
|
)
|
|
return None
|
|
|
|
def create_truck(self, entity: TruckEntity) -> TruckEntity:
|
|
truck_model = Truck(
|
|
name=entity.name,
|
|
capacity=entity.capacity,
|
|
volume=entity.volume
|
|
)
|
|
created_truck = self.repository.create(truck_model)
|
|
return TruckEntity(
|
|
id=created_truck.id,
|
|
name=created_truck.name,
|
|
capacity=created_truck.capacity,
|
|
volume=created_truck.volume,
|
|
delivery_orders=[]
|
|
)
|
|
|
|
def update_truck(self, truck_id: int, entity: TruckEntity) -> Optional[TruckEntity]:
|
|
truck_model = self.repository.get_by_id(truck_id)
|
|
if truck_model:
|
|
truck_model.name = entity.name
|
|
truck_model.capacity = entity.capacity
|
|
truck_model.volume = entity.volume
|
|
self.repository.update(truck_model)
|
|
return TruckEntity(
|
|
id=truck_model.id,
|
|
name=truck_model.name,
|
|
capacity=truck_model.capacity,
|
|
volume=truck_model.volume,
|
|
delivery_orders=[do.id for do in truck_model.delivery_orders] if truck_model.delivery_orders else []
|
|
)
|
|
return None
|
|
|
|
def delete_truck(self, truck_id: int) -> bool:
|
|
return self.repository.delete(truck_id) is not None
|