145 lines
5.3 KiB
Python
145 lines
5.3 KiB
Python
from fastapi import APIRouter, HTTPException
|
||
|
||
from db.crud import *
|
||
from db.models import LoadParameters
|
||
from db.repositories import get_exp_parameters_by_category, get_exp_parameters_by_exp_hash
|
||
from network.schemas import ExperimentParametersBody
|
||
|
||
router = APIRouter()
|
||
|
||
|
||
@router.post('/create')
|
||
async def create_experiment_parameters(body: ExperimentParametersBody):
|
||
try:
|
||
await create(ExperimentParameters,
|
||
outer_blades_count=body.outer_blades_count,
|
||
outer_blades_length=body.outer_blades_length,
|
||
outer_blades_angle=body.outer_blades_angle,
|
||
middle_blades_count=body.middle_blades_count,
|
||
load_id=body.load_id,
|
||
recycling_id=body.recycling_id,
|
||
experiment_hash=body.experiment_hash
|
||
)
|
||
|
||
return {"message": "Новая запись <ExperimentParameters> успешно добавлена"}
|
||
except Exception as e:
|
||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||
|
||
|
||
@router.get('/all')
|
||
async def get_all_experiment_parameters():
|
||
try:
|
||
result = await get_all(ExperimentParameters)
|
||
|
||
if result is not None:
|
||
return result
|
||
else:
|
||
return {"message": "Нет записей в <ExperimentParameters>"}
|
||
except Exception as e:
|
||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||
|
||
|
||
@router.get('/{id}')
|
||
async def get_by_id_experiment_parameters(id: int):
|
||
try:
|
||
result = await get_by_id(ExperimentParameters, id)
|
||
|
||
if result is not None:
|
||
return result
|
||
else:
|
||
return {"message": "Запись <ExperimentParameters> не найдена"}
|
||
except Exception as e:
|
||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||
|
||
|
||
@router.get('/by_category/{id}')
|
||
async def get_experiment_parameters_by_exp_category(id: int):
|
||
try:
|
||
result = await get_exp_parameters_by_category(id)
|
||
|
||
if result is not None:
|
||
return result
|
||
else:
|
||
return {"message": f'<ExperimentParameters> с идентификатором категории - {id} - не найдены'}
|
||
except Exception as e:
|
||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||
|
||
|
||
@router.get('/by_exp_hash/{hash}')
|
||
async def get_experiment_parameters_by_exp_category(hash: str):
|
||
try:
|
||
result = await get_exp_parameters_by_exp_hash(hash)
|
||
|
||
if result is not None:
|
||
return result
|
||
else:
|
||
return {"message": f'<ExperimentParameters> с experiment_hash = {id} - не найдены'}
|
||
except Exception as e:
|
||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||
|
||
|
||
@router.delete('/{id}/delete')
|
||
async def delete_experiment_parameters(id: int):
|
||
try:
|
||
is_deleted = await delete(ExperimentParameters, id)
|
||
|
||
if is_deleted:
|
||
return {"message": "Запись <ExperimentParameters> успешно удалена"}
|
||
else:
|
||
return {"message": "Запись <ExperimentParameters> не найдена"}
|
||
except Exception as e:
|
||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|
||
|
||
@router.post('/process_and_save/{id}')
|
||
async def process_and_save_experiment_data(id: int):
|
||
try:
|
||
# Получаем данные из ExperimentParameters по id
|
||
experiment = await get_by_id(ExperimentParameters, id)
|
||
if experiment is None:
|
||
raise HTTPException(status_code=404, detail=f"ExperimentParameters с id {id} не найден.")
|
||
|
||
# Пример обработки данных
|
||
load_value = experiment.outer_blades_length * experiment.middle_blades_count
|
||
primary_air_consumption = load_value * 0.1 # Условный коэффициент
|
||
secondary_air_consumption = load_value * 0.05
|
||
gas_inlet_consumption = load_value * 0.03
|
||
|
||
recycling_level = experiment.outer_blades_count * 0.5
|
||
co2 = recycling_level * 0.02
|
||
n2 = recycling_level * 0.01
|
||
h2o = recycling_level * 0.005
|
||
o2 = recycling_level * 0.015
|
||
|
||
# Сохраняем данные в LoadParameters
|
||
load_params = await create(
|
||
LoadParameters,
|
||
load=int(load_value),
|
||
primary_air_consumption=primary_air_consumption,
|
||
secondary_air_consumption=secondary_air_consumption,
|
||
gas_inlet_consumption=gas_inlet_consumption
|
||
)
|
||
|
||
# Сохраняем данные в RecyclingParameters
|
||
recycling_params = await create(
|
||
RecyclingParameters,
|
||
load_id=load_params.id,
|
||
recycling_level=int(recycling_level),
|
||
co2=co2,
|
||
n2=n2,
|
||
h2o=h2o,
|
||
o2=o2
|
||
)
|
||
|
||
# Обновляем ExperimentParameters, чтобы сохранить связи
|
||
experiment.load_id = load_params.id
|
||
experiment.recycling_id = recycling_params.id
|
||
|
||
return {
|
||
"message": "Данные успешно обработаны и сохранены.",
|
||
"load_parameters": load_params,
|
||
"recycling_parameters": recycling_params
|
||
}
|
||
|
||
except Exception as e:
|
||
raise HTTPException(status_code=500, detail=f"An error occurred: {str(e)}")
|