diff --git a/app/core/entities/delivery_accessory.py b/app/core/entities/delivery_accessory.py index ff0b426..840aa71 100644 --- a/app/core/entities/delivery_accessory.py +++ b/app/core/entities/delivery_accessory.py @@ -7,6 +7,8 @@ class DeliveryAccessoryEntity(BaseModel): queue: int count: int accessory_id: Optional[int] = None + accessory_name: Optional[str] = None + city_name: Optional[str] = None delivery_order_id: Optional[int] = None class Config: diff --git a/app/core/usecases/delivery_accessory_service.py b/app/core/usecases/delivery_accessory_service.py index 1dd6700..f35b6e6 100644 --- a/app/core/usecases/delivery_accessory_service.py +++ b/app/core/usecases/delivery_accessory_service.py @@ -24,6 +24,21 @@ class DeliveryAccessoriesService: for da in delivery_accessories ] + def get_all_delivery_accessories_by_order(self, delivery_order_id): + delivery_accessories = self.repository.get_all_by_order_id(delivery_order_id) + return [ + DeliveryAccessoryEntity( + id=da.id, + queue=da.queue, + count=da.count, + accessory_id=da.accessory_id, + delivery_order_id=da.delivery_order_id, + accessory_name=da.accessory.name, + city_name=da.accessory.city.name, + ) + for da in delivery_accessories + ] + def get_delivery_accessory_by_id(self, delivery_accessory_id: int) -> Optional[DeliveryAccessoryEntity]: delivery_accessory = self.repository.get_by_id(delivery_accessory_id) if delivery_accessory: diff --git a/app/infrastructure/database/repository/delivery_accessory_repository.py b/app/infrastructure/database/repository/delivery_accessory_repository.py index 41cf985..0c6fa06 100644 --- a/app/infrastructure/database/repository/delivery_accessory_repository.py +++ b/app/infrastructure/database/repository/delivery_accessory_repository.py @@ -1,4 +1,6 @@ -from sqlalchemy.orm import Session +from sqlalchemy.orm import Session, joinedload + +from app.infrastructure.database.models.accessory import Accessory from app.infrastructure.database.models.delivery_accessories import DeliveryAccessory @@ -9,6 +11,12 @@ class DeliveryAccessoriesRepository: def get_all(self): return self.db.query(DeliveryAccessory).all() + def get_all_by_order_id(self, delivery_order_id): + return self.db.query(DeliveryAccessory) \ + .options(joinedload(DeliveryAccessory.accessory).joinedload(Accessory.city)) \ + .filter(DeliveryAccessory.delivery_order_id == delivery_order_id) \ + .all() + def get_by_id(self, delivery_accessory_id: int): return self.db.query(DeliveryAccessory).filter(DeliveryAccessory.id == delivery_accessory_id).first() diff --git a/app/infrastructure/fastapi/delivery_accessory_routes.py b/app/infrastructure/fastapi/delivery_accessory_routes.py index 1e35d75..b827275 100644 --- a/app/infrastructure/fastapi/delivery_accessory_routes.py +++ b/app/infrastructure/fastapi/delivery_accessory_routes.py @@ -19,6 +19,13 @@ def read_delivery_accessories(db: Session = Depends(get_db), return service.get_all_delivery_accessories() +@router.get("/delivery-orders/{delivery_order_id}/accessories", response_model=List[DeliveryAccessoryEntity]) +def get_delivery_accessories_by_order(delivery_order_id: int, db: Session = Depends(get_db), + current_user: User = Depends(verify_token)): + service = DeliveryAccessoriesService(db) + return service.get_all_delivery_accessories_by_order(delivery_order_id) + + @router.get("/delivery-accessories/{delivery_accessory_id}", response_model=DeliveryAccessoryEntity) def read_delivery_accessory(delivery_accessory_id: int, db: Session = Depends(get_db), current_user: User = Depends(verify_token)):