from typing import Any, Dict from fastapi import APIRouter, HTTPException, status from .schema import CalculationTimeConstrainsParametersRead, CalculationTimeConstrainsRead, CalculationTimeConstrainsCreate from src.database.core import DbSession from src.models import StandardResponse from .flows import get_cost_per_failure, create_calculation from src.scope.service import get_all router = APIRouter() @router.get("/parameters", response_model=StandardResponse[CalculationTimeConstrainsParametersRead]) async def get_calculation_parameters(db_session: DbSession): """Get all calculation parameter pagination.""" avaiableScopes = {scope.id: scope.scope_name for scope in await get_all(db_session=db_session)} costFailurePerScope = {avaiableScopes.get( costPerFailure[0]): costPerFailure[1] for costPerFailure in await get_cost_per_failure(db_session=db_session)} return StandardResponse( data=CalculationTimeConstrainsParametersRead( costPerFailure=costFailurePerScope, availableScopes=avaiableScopes.values(), recommendedScope="B", historicalData={ "averageOverhaulCost": 10000000, "lastCalculation": { "id": "calc_122", "date": "2024-10-15", "scope": "B", }, }, ), message="Data retrieved successfully", ) @router.post("", response_model=StandardResponse[CalculationTimeConstrainsRead]) async def create_calculation_time_constrains(db_session: DbSession, calculation_time_constrains_in: CalculationTimeConstrainsCreate): """Calculate Here""" calculation_result = await create_calculation(db_session=db_session) return StandardResponse(data=CalculationTimeConstrainsRead( id=calculation_result["id"], result=calculation_result["result"], ), message="Data created successfully") @router.get("/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")