Move the queries when uploading a demo into a single transaction
This commit is contained in:
@@ -55,9 +55,11 @@ async fn list(
|
|||||||
Ok(axum::response::Json(
|
Ok(axum::response::Json(
|
||||||
results
|
results
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.map(|(demo, info)| common::BaseDemoInfo {
|
.map(|(demo, info)| {
|
||||||
|
common::BaseDemoInfo {
|
||||||
id: demo.demo_id,
|
id: demo.demo_id,
|
||||||
map: info.map,
|
map: info.map,
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.collect::<Vec<_>>(),
|
.collect::<Vec<_>>(),
|
||||||
))
|
))
|
||||||
@@ -104,24 +106,34 @@ async fn upload(
|
|||||||
|
|
||||||
// Turn all of this into a single transaction
|
// Turn all of this into a single transaction
|
||||||
|
|
||||||
|
let db_trans_result = db_con.build_transaction().run(|c| {
|
||||||
|
Box::pin(async move {
|
||||||
let query =
|
let query =
|
||||||
diesel::dsl::insert_into(crate::schema::demos::dsl::demos).values(crate::models::NewDemo {
|
diesel::dsl::insert_into(crate::schema::demos::dsl::demos).values(crate::models::NewDemo {
|
||||||
demo_id: demo_id.clone(),
|
demo_id: demo_id.clone(),
|
||||||
steam_id: steam_id.to_string(),
|
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)
|
let queue_query = diesel::dsl::insert_into(crate::schema::analysis_queue::dsl::analysis_queue)
|
||||||
.values(crate::models::AddAnalysisTask {
|
.values(crate::models::AddAnalysisTask {
|
||||||
demo_id: demo_id.clone(),
|
demo_id: demo_id.clone(),
|
||||||
steam_id: steam_id.to_string(),
|
steam_id: steam_id.to_string(),
|
||||||
});
|
});
|
||||||
queue_query.execute(&mut db_con).await.unwrap();
|
queue_query.execute(c).await?;
|
||||||
|
|
||||||
let processing_query =
|
let processing_query =
|
||||||
diesel::dsl::insert_into(crate::schema::processing_status::dsl::processing_status)
|
diesel::dsl::insert_into(crate::schema::processing_status::dsl::processing_status)
|
||||||
.values(crate::models::ProcessingStatus { demo_id, info: 0 });
|
.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("/"))
|
Ok(axum::response::Redirect::to("/"))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user