diff --git a/app/core/usecases/new_total_order_service.py b/app/core/usecases/new_total_order_service.py index 9271f4c..99ce488 100644 --- a/app/core/usecases/new_total_order_service.py +++ b/app/core/usecases/new_total_order_service.py @@ -5,7 +5,7 @@ from math import ceil import requests from sqlalchemy.orm import Session -from app.infrastructure.database.dependencies import get_db +from app.infrastructure.database.database import connect from app.infrastructure.database.models.delivery_accessories import DeliveryAccessory from app.infrastructure.database.models.delivery_orders import DeliveryOrder from app.infrastructure.database.models.total_orders import TotalOrder @@ -36,11 +36,12 @@ class NewTotalOrderService: grouped_by_period = self.group_accessories_by_period(accessories) routes_by_period = self.find_routes_by_period(grouped_by_period, distances, cities) - with get_db() as session: + with connect() as session: new_total_order = TotalOrder( order_datetime=datetime.now(), count_robots=2000, deadline=datetime.now(), + price=0, ) session.add(new_total_order) session.flush() @@ -55,22 +56,36 @@ class NewTotalOrderService: delivery_order_deadline = new_total_order.deadline - timedelta(days=period) + new_total_order.price += cost + new_delivery_order = DeliveryOrder( order_datetime=datetime.now(), count_trucks=vehicle_count, deadline=delivery_order_deadline, price=cost, truck_id=selected_truck, - total_order_id=new_delivery_order.id, + total_order_id=new_total_order.id, ) - session.add(new_total_order) + session.add(new_delivery_order) for point_index in range(len(route)): + if route[point_index].name == 'Челябинск': + continue + + accessory = list( + filter( + lambda x: x.city_id == route[point_index].id and x.period == period, + accessories + ) + )[0] + new_delivery_accessory = DeliveryAccessory( queue=point_index + 1, - + count=accessory.count, + accessory_id=accessory.id ) + session.add(new_delivery_accessory) response += f"Период: {period}\n" response += f"Маршрут: {' -> '.join([city.name for city in route])}\n" @@ -80,7 +95,9 @@ class NewTotalOrderService: response += f"Количество автомобилей: {vehicle_count}" response += f"Стоимость перевозки: {cost}\n" - return response + session.commit() + + return response def find_routes_by_period(self, grouped_by_period, distances, cities): purpose_city_id = self.city_repository.get_by_name('Челябинск').id diff --git a/app/infrastructure/database/database.py b/app/infrastructure/database/database.py index 5bd22a5..b865de1 100644 --- a/app/infrastructure/database/database.py +++ b/app/infrastructure/database/database.py @@ -2,7 +2,7 @@ import os from dotenv import load_dotenv from sqlalchemy import create_engine -from sqlalchemy.orm import sessionmaker +from sqlalchemy.orm import sessionmaker, Session from app.infrastructure.database.models import Base @@ -13,6 +13,11 @@ engine = create_engine(SQLALCHEMY_DATABASE_URL) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) +def connect() -> Session: + global SessionLocal + return SessionLocal() + + def init_db(): import app.infrastructure.database.models.roles import app.infrastructure.database.models.users diff --git a/app/infrastructure/fastapi/total_order_routes.py b/app/infrastructure/fastapi/total_order_routes.py index b57e466..a35cd28 100644 --- a/app/infrastructure/fastapi/total_order_routes.py +++ b/app/infrastructure/fastapi/total_order_routes.py @@ -57,7 +57,7 @@ def delete_total_order(total_order_id: int, db: Session = Depends(get_db), return success -@router.post("/total-orders/calculate", response_model=TotalOrderEntity) +@router.post("/total-orders/calculate") def calculate_total_order(db: Session = Depends(get_db)): service = NewTotalOrderService(db) result = service.total_calculate()