From 6c23e72ac53f454ec31798a7b5f3510b5f2f288d Mon Sep 17 00:00:00 2001 From: Lol3rrr Date: Thu, 10 Oct 2024 16:35:15 +0200 Subject: [PATCH] Move the queries when uploading a demo into a single transaction --- backend/src/api/demos.rs | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/backend/src/api/demos.rs b/backend/src/api/demos.rs index 4bebb25..4eb8a90 100644 --- a/backend/src/api/demos.rs +++ b/backend/src/api/demos.rs @@ -55,9 +55,11 @@ async fn list( Ok(axum::response::Json( results .into_iter() - .map(|(demo, info)| common::BaseDemoInfo { - id: demo.demo_id, - map: info.map, + .map(|(demo, info)| { + common::BaseDemoInfo { + id: demo.demo_id, + map: info.map, + } }) .collect::>(), )) @@ -104,24 +106,34 @@ async fn upload( // Turn all of this into a single transaction - let query = + let db_trans_result = db_con.build_transaction().run(|c| { + Box::pin(async move { + let query = diesel::dsl::insert_into(crate::schema::demos::dsl::demos).values(crate::models::NewDemo { demo_id: demo_id.clone(), steam_id: steam_id.to_string(), }); - query.execute(&mut db_con).await.unwrap(); + query.execute(c).await?; let queue_query = diesel::dsl::insert_into(crate::schema::analysis_queue::dsl::analysis_queue) .values(crate::models::AddAnalysisTask { demo_id: demo_id.clone(), steam_id: steam_id.to_string(), }); - queue_query.execute(&mut db_con).await.unwrap(); + queue_query.execute(c).await?; let processing_query = diesel::dsl::insert_into(crate::schema::processing_status::dsl::processing_status) .values(crate::models::ProcessingStatus { demo_id, info: 0 }); - processing_query.execute(&mut db_con).await.unwrap(); + processing_query.execute(c).await?; + + Ok::<(), diesel::result::Error>(()) + }) + }).await; + + if let Err(e) = db_trans_result { + tracing::error!("Inserting data into db: {:?}", e); + } Ok(axum::response::Redirect::to("/")) }