diff --git a/db/crud.py b/db/crud.py index 25d873f..4411075 100644 --- a/db/crud.py +++ b/db/crud.py @@ -42,6 +42,24 @@ async def update(model_class: Type[T], id: int, updated_data: Dict[str, Any]) -> await session.commit() return await get_by_id(model_class, id) +# Надо переписать/раасмотреть update +async def update_exp(model_class: Type[T], id: int, updated_data: Dict[str, Any]) -> Optional[T]: + async with async_session_postgres() as session: + async with session.begin(): # Явная транзакция + stmt = ( + update_(model_class) + .where(model_class.id == id) + .values(**updated_data) + .returning(model_class) # Возвращаем обновленный объект + ) + result = await session.execute(stmt) + updated_instance = result.scalars().first() + + if not updated_instance: + return None + + return updated_instance # Возвращаем сразу обновленный объект + async def delete(model_class: Type[T], id: int) -> bool: async with async_session_postgres() as session: diff --git a/db/repositories/experiment_parameters_repos.py b/db/repositories/experiment_parameters_repos.py index 9103c18..794b779 100644 --- a/db/repositories/experiment_parameters_repos.py +++ b/db/repositories/experiment_parameters_repos.py @@ -53,4 +53,5 @@ async def save_experiment_to_db(df: pd.DataFrame): ) except Exception as e: print(f"Ошибка при сохранении данных: {e}") - raise HTTPException(status_code=500, detail=f"Ошибка при сохранении данных: {e}") \ No newline at end of file + raise HTTPException(status_code=500, detail=f"Ошибка при сохранении данных: {e}") + diff --git a/network/routes/experiment_parameters_router.py b/network/routes/experiment_parameters_router.py index d79bd89..2216bda 100644 --- a/network/routes/experiment_parameters_router.py +++ b/network/routes/experiment_parameters_router.py @@ -130,14 +130,21 @@ async def process_and_save_experiment_data(id: int): o2=o2 ) - # Обновляем ExperimentParameters, чтобы сохранить связи - experiment.load_id = load_params.id - experiment.recycling_id = recycling_params.id + # Обновляем ExperimentParameters + experiment = await update_exp( + ExperimentParameters, + id=experiment.id, + updated_data={ + "load_id": load_params.id, + "recycling_id": recycling_params.id + } + ) return { "message": "Данные успешно обработаны и сохранены.", "load_parameters": load_params, - "recycling_parameters": recycling_params + "recycling_parameters": recycling_params, + "updated_experiment_parameters": experiment } except Exception as e: