diff --git a/src/domain/gruppe/model.rs b/src/domain/gruppe/model.rs index 551000e..d859589 100644 --- a/src/domain/gruppe/model.rs +++ b/src/domain/gruppe/model.rs @@ -1,7 +1,9 @@ pub mod gruppe; -pub mod gruppe_erstelle_input; +pub mod gruppe_erstellen_input; +pub mod gruppe_loeschen_input; pub mod gruppe_update_input; pub use gruppe::Gruppe; -pub use gruppe_erstelle_input::GruppeErstelleInput; +pub use gruppe_erstellen_input::GruppeErstelleInput; +pub use gruppe_loeschen_input::GruppeLoeschenInput; pub use gruppe_update_input::GruppeUpdateInput; diff --git a/src/domain/gruppe/model/gruppe_erstelle_input.rs b/src/domain/gruppe/model/gruppe_erstellen_input.rs similarity index 100% rename from src/domain/gruppe/model/gruppe_erstelle_input.rs rename to src/domain/gruppe/model/gruppe_erstellen_input.rs diff --git a/src/domain/gruppe/model/gruppe_loeschen_input.rs b/src/domain/gruppe/model/gruppe_loeschen_input.rs new file mode 100644 index 0000000..8cdd858 --- /dev/null +++ b/src/domain/gruppe/model/gruppe_loeschen_input.rs @@ -0,0 +1,9 @@ +use async_graphql::InputObject; + +use crate::scalar::Id; + +#[derive(InputObject)] +pub struct GruppeLoeschenInput { + /// Die ID einer Gruppe + pub id: Id, +} diff --git a/src/domain/gruppe/model/gruppe_update_input.rs b/src/domain/gruppe/model/gruppe_update_input.rs index 889a183..09094a5 100644 --- a/src/domain/gruppe/model/gruppe_update_input.rs +++ b/src/domain/gruppe/model/gruppe_update_input.rs @@ -1,7 +1,11 @@ +use crate::scalar::Id; use async_graphql::InputObject; #[derive(InputObject)] pub struct GruppeUpdateInput { + /// Die ID einer Gruppe + pub id: Id, + /// Der Name einer Gruppe pub gruppenname: String, } diff --git a/src/domain/gruppe/repository.rs b/src/domain/gruppe/repository.rs index 1014752..cf121e2 100644 --- a/src/domain/gruppe/repository.rs +++ b/src/domain/gruppe/repository.rs @@ -1,6 +1,7 @@ mod gruppe_alle; mod gruppe_dataloader; mod gruppe_erstellen; +mod gruppe_loeschen; mod gruppe_update; #[derive(Debug, Clone)] diff --git a/src/domain/gruppe/repository/gruppe_loeschen.rs b/src/domain/gruppe/repository/gruppe_loeschen.rs new file mode 100644 index 0000000..6a7806b --- /dev/null +++ b/src/domain/gruppe/repository/gruppe_loeschen.rs @@ -0,0 +1,24 @@ +use anyhow::Error; + +use super::Repository; +use crate::database::Queryer; +use crate::domain::gruppe::{entity, model}; + +impl Repository { + pub async fn gruppe_loeschen<'c, C: Queryer<'c>>( + &self, + db: C, + gruppe: &entity::Gruppe, + ) -> Result { + const QUERY: &str = r#" + DELETE FROM gruppen WHERE id=$1 RETURNING id, gruppenname, erstellt_am, geaendert_am; + "#; + + let gruppe = sqlx::query_as::<_, model::Gruppe>(QUERY) + .bind(gruppe.id) + .fetch_one(db) + .await?; + + Ok(gruppe) + } +} diff --git a/src/domain/gruppe/service.rs b/src/domain/gruppe/service.rs index bbb947c..e3fe2b4 100644 --- a/src/domain/gruppe/service.rs +++ b/src/domain/gruppe/service.rs @@ -1,6 +1,7 @@ mod gruppe_alle; mod gruppe_dataloader; mod gruppe_erstellen; +mod gruppe_loeschen; mod gruppe_update; use super::repository::Repository; diff --git a/src/domain/gruppe/service/gruppe_loeschen.rs b/src/domain/gruppe/service/gruppe_loeschen.rs new file mode 100644 index 0000000..822031b --- /dev/null +++ b/src/domain/gruppe/service/gruppe_loeschen.rs @@ -0,0 +1,25 @@ +use anyhow::Error; +use chrono::Utc; + +use super::Service; +use crate::domain::gruppe::{ + entity, + model::{self, GruppeLoeschenInput}, +}; + +impl Service { + pub async fn gruppe_loeschen( + &self, + input: GruppeLoeschenInput, + ) -> Result { + let gruppe_input = entity::Gruppe { + id: input.id, + gruppenname: String::new(), + erstellt_am: None, + geaendert_am: Some(Utc::now()), + }; + + let gruppe = self.repo.gruppe_loeschen(&self.db, &gruppe_input).await?; + Ok(gruppe) + } +} diff --git a/src/domain/gruppe/service/gruppe_update.rs b/src/domain/gruppe/service/gruppe_update.rs index 71d376f..964070b 100644 --- a/src/domain/gruppe/service/gruppe_update.rs +++ b/src/domain/gruppe/service/gruppe_update.rs @@ -17,7 +17,7 @@ impl Service { geaendert_am: Some(Utc::now()), }; - let gruppe = self.repo.gruppe_erstellen(&self.db, &gruppe_input).await?; + let gruppe = self.repo.gruppe_update(&self.db, &gruppe_input).await?; Ok(gruppe) } } diff --git a/src/domain/rolle/model.rs b/src/domain/rolle/model.rs index 691edf6..8c4652a 100644 --- a/src/domain/rolle/model.rs +++ b/src/domain/rolle/model.rs @@ -1,7 +1,9 @@ pub mod rolle; pub mod rolle_erstelle_input; +pub mod rolle_loeschen_input; pub mod rolle_update_input; pub use rolle::Rolle; pub use rolle_erstelle_input::RolleErstelleInput; +pub use rolle_loeschen_input::RolleLoeschenInput; pub use rolle_update_input::RolleUpdateInput; diff --git a/src/domain/rolle/model/rolle_loeschen_input.rs b/src/domain/rolle/model/rolle_loeschen_input.rs new file mode 100644 index 0000000..9e11987 --- /dev/null +++ b/src/domain/rolle/model/rolle_loeschen_input.rs @@ -0,0 +1,9 @@ +use async_graphql::InputObject; + +use crate::scalar::Id; + +#[derive(InputObject)] +pub struct RolleLoeschenInput { + /// Die ID einer Rolle + pub id: Id, +} diff --git a/src/domain/rolle/model/rolle_update_input.rs b/src/domain/rolle/model/rolle_update_input.rs index 6d1f7d6..6689262 100644 --- a/src/domain/rolle/model/rolle_update_input.rs +++ b/src/domain/rolle/model/rolle_update_input.rs @@ -1,6 +1,5 @@ -use async_graphql::InputObject; - use crate::scalar::Id; +use async_graphql::InputObject; #[derive(InputObject)] pub struct RolleUpdateInput { diff --git a/src/domain/rolle/repository.rs b/src/domain/rolle/repository.rs index 368d210..21b1a11 100644 --- a/src/domain/rolle/repository.rs +++ b/src/domain/rolle/repository.rs @@ -1,7 +1,7 @@ -mod delete_rolle; mod find_all_rolle; mod find_rolle_by_id; mod rolle_erstellen; +mod rolle_loeschen; mod rolle_update; mod rollen_dataloader; @@ -13,7 +13,6 @@ impl Repository { Repository {} } } - impl Default for Repository { fn default() -> Self { Self::new() diff --git a/src/domain/rolle/repository/delete_rolle.rs b/src/domain/rolle/repository/delete_rolle.rs deleted file mode 100644 index e69de29..0000000 diff --git a/src/domain/rolle/repository/rolle_loeschen.rs b/src/domain/rolle/repository/rolle_loeschen.rs new file mode 100644 index 0000000..2504bd2 --- /dev/null +++ b/src/domain/rolle/repository/rolle_loeschen.rs @@ -0,0 +1,26 @@ +use anyhow::Error; + +use super::Repository; +use crate::{ + database::Queryer, + domain::rolle::{entity, model}, +}; + +impl Repository { + pub async fn rolle_loeschen<'c, C: Queryer<'c>>( + &self, + db: C, + rolle: &entity::Rolle, + ) -> Result { + const QUERY: &str = r#" + DELETE FROM rollen WHERE id=$1 RETURNING id, rollenname, erstellt_am, geaendert_am; + "#; + + let rolle = sqlx::query_as::<_, model::Rolle>(QUERY) + .bind(rolle.id) + .fetch_one(db) + .await?; + + Ok(rolle) + } +} diff --git a/src/domain/rolle/service.rs b/src/domain/rolle/service.rs index 519bac8..caea6b6 100644 --- a/src/domain/rolle/service.rs +++ b/src/domain/rolle/service.rs @@ -1,4 +1,5 @@ mod rolle_erstellen; +mod rolle_loeschen; mod rolle_update; use super::repository::Repository; diff --git a/src/domain/rolle/service/rolle_loeschen.rs b/src/domain/rolle/service/rolle_loeschen.rs new file mode 100644 index 0000000..e4f3565 --- /dev/null +++ b/src/domain/rolle/service/rolle_loeschen.rs @@ -0,0 +1,21 @@ +use super::Service; +use anyhow::Error; + +use crate::domain::rolle::{ + entity, + model::{self, RolleLoeschenInput}, +}; + +impl Service { + pub async fn rolle_loeschen(&self, input: RolleLoeschenInput) -> Result { + let rolle_input = entity::Rolle { + id: input.id, + rollenname: String::new(), + erstellt_am: None, + geaendert_am: None, + }; + + let deleted = self.repo.rolle_loeschen(&self.db, &rolle_input).await?; + Ok(deleted) + } +} diff --git a/src/mutations/gruppe.rs b/src/mutations/gruppe.rs index 670ff30..fb43a53 100644 --- a/src/mutations/gruppe.rs +++ b/src/mutations/gruppe.rs @@ -1,5 +1,5 @@ use crate::domain::gruppe::{ - model::{Gruppe, GruppeErstelleInput}, + model::{Gruppe, GruppeErstelleInput, GruppeLoeschenInput, GruppeUpdateInput}, service::Service, }; use async_graphql::{Context, FieldResult}; @@ -10,7 +10,7 @@ pub struct GruppeMutation; #[async_graphql::Object] impl GruppeMutation { - async fn gruppe_ersellen( + async fn erselle_gruppe( &self, ctx: &Context<'_>, input: GruppeErstelleInput, @@ -20,4 +20,26 @@ impl GruppeMutation { let gruppe = Service::new(pool.clone()).gruppe_erstellen(input).await?; Ok(gruppe) } + + async fn update_gruppe( + &self, + ctx: &Context<'_>, + input: GruppeUpdateInput, + ) -> FieldResult { + let pool = ctx.data::()?; + + let gruppe = Service::new(pool.clone()).gruppe_update(input).await?; + Ok(gruppe) + } + + async fn loesche_gruppe( + &self, + ctx: &Context<'_>, + input: GruppeLoeschenInput, + ) -> FieldResult { + let pool = ctx.data::()?; + + let gruppe = Service::new(pool.clone()).gruppe_loeschen(input).await?; + Ok(gruppe) + } } diff --git a/src/mutations/rolle.rs b/src/mutations/rolle.rs index e64364b..5993303 100644 --- a/src/mutations/rolle.rs +++ b/src/mutations/rolle.rs @@ -1,5 +1,5 @@ use crate::domain::rolle::{ - model::{Rolle, RolleErstelleInput, RolleUpdateInput}, + model::{Rolle, RolleErstelleInput, RolleLoeschenInput, RolleUpdateInput}, service::Service, }; use async_graphql::{Context, FieldResult}; @@ -10,7 +10,7 @@ pub struct RolleMutation; #[async_graphql::Object] impl RolleMutation { - async fn rolle_erstellen( + async fn erstelle_rolle( &self, ctx: &Context<'_>, input: RolleErstelleInput, @@ -21,10 +21,21 @@ impl RolleMutation { Ok(gruppe) } - async fn rolle_update(&self, ctx: &Context<'_>, input: RolleUpdateInput) -> FieldResult { + async fn update_rolle(&self, ctx: &Context<'_>, input: RolleUpdateInput) -> FieldResult { let pool = ctx.data::()?; - let gruppe = Service::new(pool.clone()).rolle_update(input).await?; - Ok(gruppe) + let rolle = Service::new(pool.clone()).rolle_update(input).await?; + Ok(rolle) + } + + async fn loesche_rolle( + &self, + ctx: &Context<'_>, + input: RolleLoeschenInput, + ) -> FieldResult { + let pool = ctx.data::()?; + + let rolle = Service::new(pool.clone()).rolle_loeschen(input).await?; + Ok(rolle) } } diff --git a/src/queries/gruppe.rs b/src/queries/gruppe.rs index 8faa5d4..408f606 100644 --- a/src/queries/gruppe.rs +++ b/src/queries/gruppe.rs @@ -8,12 +8,12 @@ pub struct GruppeQuery {} #[Object(extends)] impl GruppeQuery { - async fn gruppe(&self, ctx: &Context<'_>, id: uuid::Uuid) -> FieldResult { - todo!(); - // let pool = ctx.data::()?; - // - // Ok(row) - } + // async fn gruppe(&self, ctx: &Context<'_>, id: uuid::Uuid) -> FieldResult { + // todo!(); + // // let pool = ctx.data::()?; + // // + // // Ok(row) + // } async fn gruppen(&self, ctx: &Context<'_>) -> FieldResult> { let pool = ctx.data::()?;