fix pkg. add id not populated error and migrate to transaction
This commit is contained in:
		@@ -12,7 +12,8 @@ use rocket::{get, post, State};
 | 
				
			|||||||
use rocket_okapi::okapi::schemars;
 | 
					use rocket_okapi::okapi::schemars;
 | 
				
			||||||
use rocket_okapi::{openapi, JsonSchema};
 | 
					use rocket_okapi::{openapi, JsonSchema};
 | 
				
			||||||
use sea_orm::{
 | 
					use sea_orm::{
 | 
				
			||||||
    ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, QueryOrder, QuerySelect, RelationTrait,
 | 
					    ActiveModelTrait, ColumnTrait, EntityTrait, QueryFilter, QueryOrder, QuerySelect,
 | 
				
			||||||
 | 
					    RelationTrait, TransactionTrait,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
use sea_orm::{DatabaseConnection, Set};
 | 
					use sea_orm::{DatabaseConnection, Set};
 | 
				
			||||||
use tokio::sync::broadcast::Sender;
 | 
					use tokio::sync::broadcast::Sender;
 | 
				
			||||||
@@ -30,14 +31,17 @@ pub async fn package_add(
 | 
				
			|||||||
    input: Json<AddBody>,
 | 
					    input: Json<AddBody>,
 | 
				
			||||||
    tx: &State<Sender<Action>>,
 | 
					    tx: &State<Sender<Action>>,
 | 
				
			||||||
) -> Result<(), BadRequest<String>> {
 | 
					) -> Result<(), BadRequest<String>> {
 | 
				
			||||||
    let db = db as &DatabaseConnection;
 | 
					    let txn = db
 | 
				
			||||||
 | 
					        .begin()
 | 
				
			||||||
 | 
					        .await
 | 
				
			||||||
 | 
					        .map_err(|e| BadRequest(Some(e.to_string())))?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // remove leading and trailing whitespaces
 | 
					    // remove leading and trailing whitespaces
 | 
				
			||||||
    let pkg_name = input.name.trim();
 | 
					    let pkg_name = input.name.trim();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if let Some(..) = Packages::find()
 | 
					    if let Some(..) = Packages::find()
 | 
				
			||||||
        .filter(packages::Column::Name.eq(pkg_name))
 | 
					        .filter(packages::Column::Name.eq(pkg_name))
 | 
				
			||||||
        .one(db)
 | 
					        .one(&txn)
 | 
				
			||||||
        .await
 | 
					        .await
 | 
				
			||||||
        .map_err(|e| BadRequest(Some(e.to_string())))?
 | 
					        .map_err(|e| BadRequest(Some(e.to_string())))?
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
@@ -55,28 +59,28 @@ pub async fn package_add(
 | 
				
			|||||||
        ..Default::default()
 | 
					        ..Default::default()
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    new_package
 | 
					    let mut new_package = new_package
 | 
				
			||||||
        .clone()
 | 
					        .clone()
 | 
				
			||||||
        .save(db)
 | 
					        .save(&txn)
 | 
				
			||||||
        .await
 | 
					        .await
 | 
				
			||||||
        .map_err(|e| BadRequest(Some(e.to_string())))?;
 | 
					        .map_err(|e| BadRequest(Some(e.to_string())))?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let new_version = versions::ActiveModel {
 | 
					    let new_version = versions::ActiveModel {
 | 
				
			||||||
        version: Set(pkg.version.clone()),
 | 
					        version: Set(pkg.version.clone()),
 | 
				
			||||||
        package_id: Set(new_package.id.clone().unwrap()),
 | 
					        package_id: new_package.id.clone(),
 | 
				
			||||||
        ..Default::default()
 | 
					        ..Default::default()
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    new_version
 | 
					    let new_version = new_version
 | 
				
			||||||
        .clone()
 | 
					        .clone()
 | 
				
			||||||
        .save(db)
 | 
					        .save(&txn)
 | 
				
			||||||
        .await
 | 
					        .await
 | 
				
			||||||
        .map_err(|e| BadRequest(Some(e.to_string())))?;
 | 
					        .map_err(|e| BadRequest(Some(e.to_string())))?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    new_package.status = Set(3);
 | 
					    new_package.status = Set(3);
 | 
				
			||||||
    new_package.latest_version_id = Set(Some(new_version.id.clone().unwrap()));
 | 
					    new_package.latest_version_id = Set(Some(new_version.id.clone().unwrap()));
 | 
				
			||||||
    new_package
 | 
					    new_package
 | 
				
			||||||
        .save(db)
 | 
					        .save(&txn)
 | 
				
			||||||
        .await
 | 
					        .await
 | 
				
			||||||
        .map_err(|e| BadRequest(Some(e.to_string())))?;
 | 
					        .map_err(|e| BadRequest(Some(e.to_string())))?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -87,6 +91,9 @@ pub async fn package_add(
 | 
				
			|||||||
        new_version,
 | 
					        new_version,
 | 
				
			||||||
    ));
 | 
					    ));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    txn.commit()
 | 
				
			||||||
 | 
					        .await
 | 
				
			||||||
 | 
					        .map_err(|e| BadRequest(Some(e.to_string())))?;
 | 
				
			||||||
    Ok(())
 | 
					    Ok(())
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,4 +1,4 @@
 | 
				
			|||||||
use crate::repo::repo::{remove_version};
 | 
					use crate::repo::repo::remove_version;
 | 
				
			||||||
use rocket::{post, State};
 | 
					use rocket::{post, State};
 | 
				
			||||||
use rocket_okapi::openapi;
 | 
					use rocket_okapi::openapi;
 | 
				
			||||||
use sea_orm::DatabaseConnection;
 | 
					use sea_orm::DatabaseConnection;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user