API_logistics/app/core/usecases/delivery_service.py
2024-10-04 11:11:13 +05:00

70 lines
2.5 KiB
Python

from typing import List, Optional
from sqlalchemy.orm import Session
from app.core.entities.delivery import DeliveryEntity
from app.infrastructure.database.models.deliveries import Delivery
from app.infrastructure.database.repository.delivery_repository import DeliveryRepository
class DeliveryService:
def __init__(self, db: Session):
self.repository = DeliveryRepository(db)
def get_all_deliveries(self) -> List[DeliveryEntity]:
deliveries = self.repository.get_all()
return [
DeliveryEntity(
id=d.id,
count=d.count,
storage_accessories_id=d.storage_accessories_id,
step_id=d.step_id,
)
for d in deliveries
]
def get_delivery_by_id(self, delivery_id: int) -> Optional[DeliveryEntity]:
delivery = self.repository.get_by_id(delivery_id)
if delivery:
return DeliveryEntity(
id=delivery.id,
count=delivery.count,
storage_accessories_id=delivery.storage_accessories_id,
step_id=delivery.step_id,
)
return None
def create_delivery(self, entity: DeliveryEntity) -> DeliveryEntity:
delivery_model = Delivery(
count=entity.count,
storage_accessories_id=entity.storage_accessories_id,
step_id=entity.step_id,
)
created_delivery = self.repository.create(delivery_model)
return DeliveryEntity(
id=created_delivery.id,
count=created_delivery.count,
storage_accessories_id=created_delivery.storage_accessories_id,
step_id=created_delivery.step_id,
)
def update_delivery(self, delivery_id: int, entity: DeliveryEntity) -> Optional[DeliveryEntity]:
delivery_model = self.repository.get_by_id(delivery_id)
if delivery_model:
delivery_model.count = entity.count
delivery_model.storage_accessories_id = entity.storage_accessories_id
delivery_model.step_id = entity.step_id
self.repository.update(delivery_model)
return DeliveryEntity(
id=delivery_model.id,
count=delivery_model.count,
storage_accessories_id=delivery_model.storage_accessories_id,
step_id=delivery_model.step_id,
)
return None
def delete_delivery(self, delivery_id: int) -> bool:
return self.repository.delete(delivery_id) is not None