From 1a786f5ee5e726f679048f0d1407a6f55985ac1e Mon Sep 17 00:00:00 2001 From: Cizz22 Date: Wed, 11 Dec 2024 15:49:10 +0700 Subject: [PATCH] add simulation --- src/calculation_time_constrains/router.py | 26 +++++++--------------- src/calculation_time_constrains/schema.py | 7 ++++-- src/calculation_time_constrains/service.py | 11 +++++++++ 3 files changed, 24 insertions(+), 20 deletions(-) diff --git a/src/calculation_time_constrains/router.py b/src/calculation_time_constrains/router.py index b5874ee..d09d4cd 100644 --- a/src/calculation_time_constrains/router.py +++ b/src/calculation_time_constrains/router.py @@ -1,11 +1,11 @@ from typing import Any, Dict, Optional, Union from fastapi import APIRouter, HTTPException, status -from .schema import CalculationTimeConstrainsParametersRead, CalculationTimeConstrainsRead, CalculationTimeConstrainsParametersCreate, CalculationTimeConstrainsParametersRetrive +from .schema import CalculationTimeConstrainsCreate, CalculationTimeConstrainsParametersRead, CalculationTimeConstrainsRead, CalculationTimeConstrainsParametersCreate, CalculationTimeConstrainsParametersRetrive, CalculationResultsRead from src.database.core import DbSession from src.models import StandardResponse from src.auth.service import CurrentUser -from .service import create_param_and_data, get_calculation_result +from .service import create_param_and_data, get_calculation_result, get_calculation_result_by_day from .flows import get_create_calculation_parameters, create_calculation, get_or_create_scope_equipment_calculation from fastapi.params import Query @@ -48,19 +48,9 @@ async def get_calculation_results(db_session: DbSession, calculation_id): message="Data retrieved successfully", ) -@router.post("/simulation", response_model=StandardResponse[Dict[str, Any]]) -async def get_simulation_result(): - results = { - "simulation": { - "intervalDays": 45, - "numberOfFailures": 75, - "totalCost": 550000000, - }, - "comparison": { - "vsOptimal": { - "failureDifference": 16, - "costDifference": 50000000 - }, - } - } - return StandardResponse(data=results, message="Data retrieved successfully") + +@router.post("/{calculation_id}/simulation", response_model=StandardResponse[CalculationResultsRead]) +async def get_simulation_result(db_session:DbSession, calculation_id, calculation_simuation_in: CalculationTimeConstrainsCreate): + simulation_result = await get_calculation_result_by_day(db_session=db_session, calculation_id=calculation_id, simulation_day=calculation_simuation_in.intervalDays) + + return StandardResponse(data=simulation_result, message="Data retrieved successfully") diff --git a/src/calculation_time_constrains/schema.py b/src/calculation_time_constrains/schema.py index ff33e50..b583feb 100644 --- a/src/calculation_time_constrains/schema.py +++ b/src/calculation_time_constrains/schema.py @@ -63,6 +63,9 @@ class CalculationTimeConstrainsRead(CalculationTimeConstrainsBase): optimumOh: Dict[str, Any] +class CalculationTimeConstrainsCreate(CalculationTimeConstrainsBase): + intervalDays: int + + class CalculationTimeConstrainsSimulationRead(CalculationTimeConstrainsBase): - simulation: Dict[str, Any] - comparison: Dict[str, Any] + simulation: CalculationResultsRead diff --git a/src/calculation_time_constrains/service.py b/src/calculation_time_constrains/service.py index 51b50e2..95e076c 100644 --- a/src/calculation_time_constrains/service.py +++ b/src/calculation_time_constrains/service.py @@ -172,4 +172,15 @@ async def get_calculation_by_reference_and_parameter(*, db_session: DbSession, c result = await db_session.execute(stmt) return result.scalar() + + +async def get_calculation_result_by_day(*, db_session:DbSession, calculation_id, simulation_day): + stmt = select(CalculationResult).filter(and_( + CalculationResult.day == simulation_day, + CalculationResult.calculation_data_id == calculation_id + )) + + result = await db_session.execute(stmt) + + return result.scalar()