feat(repositories): add delete by id method code generation

This commit is contained in:
Matthieu Bessat 2025-06-23 16:54:51 +02:00
parent 64e1aa33a6
commit e4a1006412

View file

@ -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