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