feat(repositories): add delete by id method code generation
This commit is contained in:
parent
64e1aa33a6
commit
e4a1006412
1 changed files with 31 additions and 0 deletions
|
|
@ -165,6 +165,34 @@ fn gen_update_by_id_method(model: &Model) -> TokenStream {
|
|||
}
|
||||
}
|
||||
|
||||
fn gen_delete_by_id_method(model: &Model) -> TokenStream {
|
||||
let resource_ident = format_ident!("{}", &model.name);
|
||||
let error_msg = format!("Failed to delete resource {:?}", model.name.clone());
|
||||
let primary_key = &model.fields.iter()
|
||||
.find(|f| f.is_primary)
|
||||
.expect("A model must have at least one primary key")
|
||||
.name;
|
||||
|
||||
let func_name_ident = format_ident!("delete_by_{}", primary_key);
|
||||
let query = format!(
|
||||
"DELETE FROM {} WHERE {} = $1",
|
||||
model.table_name,
|
||||
primary_key
|
||||
);
|
||||
|
||||
quote! {
|
||||
pub async fn #func_name_ident(&self, item_id: &str) -> Result<()> {
|
||||
sqlx::query(#query)
|
||||
.bind(item_id)
|
||||
.execute(&self.db.0)
|
||||
.await
|
||||
.context(#error_msg)?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
fn generate_repository_file(model: &Model) -> Result<SourceNodeContainer> {
|
||||
let resource_name = model.name.clone();
|
||||
|
|
@ -179,6 +207,7 @@ fn generate_repository_file(model: &Model) -> Result<SourceNodeContainer> {
|
|||
let insert_method_code = gen_insert_method(&model);
|
||||
let insert_many_method_code = gen_insert_many_method(&model);
|
||||
let update_by_id_method_code = gen_update_by_id_method(&model);
|
||||
let delete_by_id_method_code = gen_delete_by_id_method(&model);
|
||||
|
||||
// TODO: add import line
|
||||
|
||||
|
|
@ -207,6 +236,8 @@ fn generate_repository_file(model: &Model) -> Result<SourceNodeContainer> {
|
|||
#insert_many_method_code
|
||||
|
||||
#update_by_id_method_code
|
||||
|
||||
#delete_by_id_method_code
|
||||
}
|
||||
};
|
||||
// convert TokenStream into rust code as string
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue