add simulation

main
Cizz22 1 year ago
parent f4a50706d1
commit 1a786f5ee5

@ -1,11 +1,11 @@
from typing import Any, Dict, Optional, Union from typing import Any, Dict, Optional, Union
from fastapi import APIRouter, HTTPException, status 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.database.core import DbSession
from src.models import StandardResponse from src.models import StandardResponse
from src.auth.service import CurrentUser 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 .flows import get_create_calculation_parameters, create_calculation, get_or_create_scope_equipment_calculation
from fastapi.params import Query from fastapi.params import Query
@ -48,19 +48,9 @@ async def get_calculation_results(db_session: DbSession, calculation_id):
message="Data retrieved successfully", message="Data retrieved successfully",
) )
@router.post("/simulation", response_model=StandardResponse[Dict[str, Any]])
async def get_simulation_result(): @router.post("/{calculation_id}/simulation", response_model=StandardResponse[CalculationResultsRead])
results = { async def get_simulation_result(db_session:DbSession, calculation_id, calculation_simuation_in: CalculationTimeConstrainsCreate):
"simulation": { simulation_result = await get_calculation_result_by_day(db_session=db_session, calculation_id=calculation_id, simulation_day=calculation_simuation_in.intervalDays)
"intervalDays": 45,
"numberOfFailures": 75, return StandardResponse(data=simulation_result, message="Data retrieved successfully")
"totalCost": 550000000,
},
"comparison": {
"vsOptimal": {
"failureDifference": 16,
"costDifference": 50000000
},
}
}
return StandardResponse(data=results, message="Data retrieved successfully")

@ -63,6 +63,9 @@ class CalculationTimeConstrainsRead(CalculationTimeConstrainsBase):
optimumOh: Dict[str, Any] optimumOh: Dict[str, Any]
class CalculationTimeConstrainsCreate(CalculationTimeConstrainsBase):
intervalDays: int
class CalculationTimeConstrainsSimulationRead(CalculationTimeConstrainsBase): class CalculationTimeConstrainsSimulationRead(CalculationTimeConstrainsBase):
simulation: Dict[str, Any] simulation: CalculationResultsRead
comparison: Dict[str, Any]

@ -172,4 +172,15 @@ async def get_calculation_by_reference_and_parameter(*, db_session: DbSession, c
result = await db_session.execute(stmt) result = await db_session.execute(stmt)
return result.scalar() 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()

Loading…
Cancel
Save