Skip to content

Commit

Permalink
refactor/nanocld: split repository delete
Browse files Browse the repository at this point in the history
  • Loading branch information
leon3s committed Dec 19, 2023
1 parent 5118888 commit 6c6029c
Show file tree
Hide file tree
Showing 5 changed files with 40 additions and 70 deletions.
23 changes: 1 addition & 22 deletions bin/nanocld/src/repositories/cargo.rs
Original file line number Diff line number Diff line change
Expand Up @@ -29,28 +29,7 @@ impl RepositoryUpdate for CargoDb {
type UpdateItem = CargoUpdateDb;
}

impl RepositoryDelete for CargoDb {
fn gen_del_query(
filter: &GenericFilter,
) -> diesel::query_builder::BoxedDeleteStatement<
'static,
diesel::pg::Pg,
<Self as diesel::associations::HasTable>::Table,
>
where
Self: diesel::associations::HasTable,
{
let r#where = filter.r#where.to_owned().unwrap_or_default();
let mut query = diesel::delete(cargoes::dsl::cargoes).into_boxed();
if let Some(value) = r#where.get("key") {
gen_where4string!(query, cargoes::dsl::key, value);
}
if let Some(value) = r#where.get("name") {
gen_where4string!(query, cargoes::dsl::name, value);
}
query
}
}
impl RepositoryDelByPk for CargoDb {}

impl RepositoryReadWithSpec for CargoDb {
type Output = Cargo;
Expand Down
55 changes: 29 additions & 26 deletions bin/nanocld/src/repositories/generic/delete.rs
Original file line number Diff line number Diff line change
@@ -1,40 +1,30 @@
use std::sync::Arc;

use diesel::{prelude::*, associations::HasTable, query_dsl, query_builder};
use ntex::rt::JoinHandle;
use diesel::{prelude::*, associations::HasTable, query_dsl, query_builder};

use nanocl_error::io::IoResult;

use nanocl_stubs::generic::GenericFilter;

use crate::{utils, models::Pool};

pub trait RepositoryDelete: super::RepositoryBase {
fn gen_del_query(
filter: &GenericFilter,
) -> diesel::query_builder::BoxedDeleteStatement<
'static,
diesel::pg::Pg,
<Self as diesel::associations::HasTable>::Table,
>
pub trait RepositoryDelByPk: super::RepositoryBase {
fn del_by_pk<Pk>(
pk: &Pk,
pool: &Pool,
) -> JoinHandle<IoResult<()>>
where
Self: diesel::associations::HasTable;

fn del_by_pk<Pk>(
pk: &Pk,
pool: &Pool,
) -> JoinHandle<IoResult<()>>
where
Self: Sized + HasTable,
Pk: ToOwned + ?Sized + std::fmt::Display,
<Pk as ToOwned>::Owned: Send + 'static,
Self::Table: query_dsl::methods::FindDsl<<Pk as ToOwned>::Owned> + HasTable<Table = Self::Table>,
diesel::helper_types::Find<Self::Table, <Pk as ToOwned>::Owned>: query_builder::IntoUpdateTarget,
query_builder::DeleteStatement<
<diesel::helper_types::Find<Self::Table, <Pk as ToOwned>::Owned> as HasTable>::Table,
<diesel::helper_types::Find<Self::Table, <Pk as ToOwned>::Owned> as query_builder::IntoUpdateTarget>::WhereClause,
>: query_builder::QueryFragment<diesel::pg::Pg> + query_builder::QueryId,
{
Self: Sized + HasTable,
Pk: ToOwned + ?Sized + std::fmt::Display,
<Pk as ToOwned>::Owned: Send + 'static,
Self::Table: query_dsl::methods::FindDsl<<Pk as ToOwned>::Owned> + HasTable<Table = Self::Table>,
diesel::helper_types::Find<Self::Table, <Pk as ToOwned>::Owned>: query_builder::IntoUpdateTarget,
query_builder::DeleteStatement<
<diesel::helper_types::Find<Self::Table, <Pk as ToOwned>::Owned> as HasTable>::Table,
<diesel::helper_types::Find<Self::Table, <Pk as ToOwned>::Owned> as query_builder::IntoUpdateTarget>::WhereClause,
>: query_builder::QueryFragment<diesel::pg::Pg> + query_builder::QueryId,
{
log::trace!("{}::delete_by_pk: {pk}", Self::get_name());
let pool = Arc::clone(pool);
let pk = pk.to_owned();
Expand All @@ -46,6 +36,18 @@ pub trait RepositoryDelete: super::RepositoryBase {
Ok(())
})
}
}

pub trait RepositoryDelBy: super::RepositoryBase {
fn gen_del_query(
filter: &GenericFilter,
) -> diesel::query_builder::BoxedDeleteStatement<
'static,
diesel::pg::Pg,
<Self as diesel::associations::HasTable>::Table,
>
where
Self: diesel::associations::HasTable;

fn del_by(
filter: &GenericFilter,
Expand All @@ -56,6 +58,7 @@ pub trait RepositoryDelete: super::RepositoryBase {
<Self as diesel::associations::HasTable>::Table: diesel::query_builder::QueryId + 'static,
<<Self as diesel::associations::HasTable>::Table as diesel::QuerySource>::FromClause: diesel::query_builder::QueryFragment<diesel::pg::Pg>,
{
log::trace!("{}::delete_by: {filter:?}", Self::get_name());
let pool = Arc::clone(pool);
let filter = filter.clone();
ntex::rt::spawn_blocking(move || {
Expand Down
4 changes: 2 additions & 2 deletions bin/nanocld/src/repositories/generic/update.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ pub trait RepositoryUpdate: super::RepositoryBase {
) -> JoinHandle<IoResult<Self>>
where
T: Into<Self::UpdateItem>,
Pk: ToOwned + ?Sized,
Pk: ToOwned + ?Sized + std::fmt::Display,
<Pk as ToOwned>::Owned: Send + 'static,
Self: Sized + Send + associations::HasTable + 'static,
<Self as associations::HasTable>::Table: diesel::query_dsl::methods::FindDsl<<Pk as ToOwned>::Owned> + associations::HasTable<Table = Self::Table>,
Expand All @@ -33,7 +33,7 @@ pub trait RepositoryUpdate: super::RepositoryBase {
>:
diesel::query_builder::AsQuery + diesel::query_dsl::LoadQuery<'static, diesel::pg::PgConnection, Self>,
{
log::trace!("{}::update_by_pk", Self::get_name());
log::trace!("{}::update_by_pk: {pk}", Self::get_name());
let pool = Arc::clone(pool);
let pk = pk.to_owned();
let values = values.into();
Expand Down
16 changes: 1 addition & 15 deletions bin/nanocld/src/repositories/namespace.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,7 @@ impl RepositoryBase for NamespaceDb {}

impl RepositoryCreate for NamespaceDb {}

impl RepositoryDelete for NamespaceDb {
fn gen_del_query(
_filter: &GenericFilter,
) -> diesel::query_builder::BoxedDeleteStatement<
'static,
diesel::pg::Pg,
<Self as diesel::associations::HasTable>::Table,
>
where
Self: diesel::associations::HasTable,
{
let query = diesel::delete(namespaces::table).into_boxed();
query
}
}
impl RepositoryDelByPk for NamespaceDb {}

impl RepositoryRead for NamespaceDb {
type Output = NamespaceDb;
Expand Down
12 changes: 7 additions & 5 deletions bin/nanocld/src/repositories/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,14 @@ impl RepositoryBase for ProcessDb {}

impl RepositoryCreate for ProcessDb {}

impl RepositoryUpdate for ProcessDb {
type UpdateItem = ProcessUpdateDb;
}

impl RepositoryDelByPk for ProcessDb {}

/// Implement delete_by_pk and delete_by_id for ProcessDb
impl RepositoryDelete for ProcessDb {
impl RepositoryDelBy for ProcessDb {
fn gen_del_query(
filter: &GenericFilter,
) -> diesel::query_builder::BoxedDeleteStatement<
Expand Down Expand Up @@ -86,10 +92,6 @@ impl RepositoryRead for ProcessDb {
}
}

impl RepositoryUpdate for ProcessDb {
type UpdateItem = ProcessUpdateDb;
}

impl ProcessDb {
pub(crate) async fn find_by_kind_key(
kind_key: &str,
Expand Down

0 comments on commit 6c6029c

Please sign in to comment.