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
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")
|