You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
2.9 KiB
Python

from typing import Any, Dict, Optional, Union
from fastapi import APIRouter, HTTPException, status
from .schema import CalculationTimeConstrainsParametersRead, CalculationTimeConstrainsRead, CalculationTimeConstrainsParametersCreate, CalculationTimeConstrainsParametersRetrive
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 .flows import get_create_calculation_parameters, create_calculation, get_or_create_scope_equipment_calculation
from fastapi.params import Query
router = APIRouter()
@router.post("", response_model=StandardResponse[Union[str, CalculationTimeConstrainsRead]])
async def create_calculation_time_constrains(db_session: DbSession, current_user: CurrentUser, calculation_time_constrains_in: CalculationTimeConstrainsParametersCreate, scope_calculation_id: Optional[str] = Query(None), with_results: Optional[int] = Query(0)):
"""Save calculation time constrains Here"""
if scope_calculation_id:
results = await get_or_create_scope_equipment_calculation(db_session=db_session, scope_calculation_id=scope_calculation_id, calculation_time_constrains_in=calculation_time_constrains_in)
else:
results = await create_calculation(db_session=db_session, calculation_time_constrains_in=calculation_time_constrains_in, created_by=current_user.name)
if not with_results:
results = str(results.id)
return StandardResponse(data=results, message="Data created successfully")
@router.get("/parameters", response_model=StandardResponse[Union[CalculationTimeConstrainsParametersRetrive, CalculationTimeConstrainsParametersRead]])
async def get_calculation_parameters(db_session: DbSession, calculation_id: Optional[str] = Query(None)):
"""Get all calculation parameter."""
parameters = await get_create_calculation_parameters(db_session=db_session, calculation_id=calculation_id)
return StandardResponse(
data=parameters,
message="Data retrieved successfully",
)
@router.get("/{calculation_id}", response_model=StandardResponse[CalculationTimeConstrainsRead])
async def get_calculation_results(db_session: DbSession, calculation_id):
results = await get_calculation_result(db_session=db_session, calculation_id=calculation_id)
return StandardResponse(
data=results,
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")