From dc8e914a5f9a89a7a07b2c78c0861136312c5e2c Mon Sep 17 00:00:00 2001 From: andrei Date: Mon, 7 Oct 2024 20:47:14 +0500 Subject: [PATCH] ._. --- app/core/usecases/delivery_order_service.py | 26 +++++++++++++++++++ app/core/usecases/new_total_order_service.py | 5 ++-- .../fastapi/delivery_order_routes.py | 18 ++++++++++++- 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/app/core/usecases/delivery_order_service.py b/app/core/usecases/delivery_order_service.py index 08e3c43..ec0fd6f 100644 --- a/app/core/usecases/delivery_order_service.py +++ b/app/core/usecases/delivery_order_service.py @@ -116,5 +116,31 @@ class DeliveryOrdersService: ) return None + def update_delivery_order_route(self, delivery_order_id: int, estimated_route_time_in_minutes: Optional[int], + route: Optional[List[dict]]) -> Optional[DeliveryOrderEntity]: + delivery_order_model = self.repository.get_by_id(delivery_order_id) + + if delivery_order_model: + if estimated_route_time_in_minutes is not None: + delivery_order_model.estimated_route_time_in_minutes = estimated_route_time_in_minutes + if route is not None: + delivery_order_model.route = route + + self.repository.update(delivery_order_model) + + return DeliveryOrderEntity( + id=delivery_order_model.id, + order_datetime=delivery_order_model.order_datetime, + count_trucks=delivery_order_model.count_trucks, + deadline=delivery_order_model.deadline, + price=delivery_order_model.price, + truck_id=delivery_order_model.truck_id, + total_order_id=delivery_order_model.total_order_id, + estimated_route_time_in_minutes=delivery_order_model.estimated_route_time_in_minutes, + route=delivery_order_model.route, + ) + + return None + def delete_delivery_order(self, delivery_order_id: int) -> bool: return self.repository.delete(delivery_order_id) is not None diff --git a/app/core/usecases/new_total_order_service.py b/app/core/usecases/new_total_order_service.py index a5ec26f..c9bd4b1 100644 --- a/app/core/usecases/new_total_order_service.py +++ b/app/core/usecases/new_total_order_service.py @@ -110,8 +110,9 @@ class NewTotalOrderService: for route in all_routes: distance = self.calculate_route_distance(route, distances) total_weight = sum( - sum(accessory.weight for accessory in accessories if accessory.city_id == city.id) for city in - route) + sum(accessory.weight for accessory in accessories if accessory.city_id == city.id) + for city in route + ) cost = self.calculate_route_cost(route, accessories, distances) routes_with_details.append((route, (distance, total_weight, cost))) diff --git a/app/infrastructure/fastapi/delivery_order_routes.py b/app/infrastructure/fastapi/delivery_order_routes.py index 7aa10f9..522c256 100644 --- a/app/infrastructure/fastapi/delivery_order_routes.py +++ b/app/infrastructure/fastapi/delivery_order_routes.py @@ -31,7 +31,7 @@ def read_delivery_order(delivery_order_id: int, db: Session = Depends(get_db), @router.get("/delivery-orders/total/{total_order_id}", response_model=List[DeliveryOrderEntity]) def read_delivery_order_by_total(total_order_id: int, db: Session = Depends(get_db), - current_user: User = Depends(verify_token)): + current_user: User = Depends(verify_token)): service = DeliveryOrdersService(db) delivery_order = service.get_delivery_order_by_total_order_id(total_order_id) if delivery_order is None: @@ -64,3 +64,19 @@ def delete_delivery_order(delivery_order_id: int, db: Session = Depends(get_db), if not success: raise HTTPException(status_code=404, detail="Delivery order not found") return success + + +@router.put("/delivery-orders/{delivery_order_id}/route", response_model=DeliveryOrderEntity) +def update_delivery_order_route( + delivery_order_id: int, + estimated_route_time_in_minutes: int, + route: List[dict], + db: Session = Depends(get_db), + current_user: User = Depends(verify_token) +): + service = DeliveryOrdersService(db) + updated_delivery_order = service.update_delivery_order_route(delivery_order_id, estimated_route_time_in_minutes, + route) + if updated_delivery_order is None: + raise HTTPException(status_code=404, detail="Delivery order not found") + return updated_delivery_order