rollen muations und rolle_viele_erstellen
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
pub mod dataloader;
|
pub mod dataloader;
|
||||||
pub mod entity;
|
pub mod entity;
|
||||||
pub mod model;
|
pub mod model;
|
||||||
|
pub mod mutation;
|
||||||
pub mod queries;
|
pub mod queries;
|
||||||
pub mod repository;
|
pub mod repository;
|
||||||
pub mod service;
|
pub mod service;
|
||||||
|
|||||||
3
src/domain/rolle/mutation.rs
Normal file
3
src/domain/rolle/mutation.rs
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
pub mod rolle;
|
||||||
|
|
||||||
|
pub use rolle::RolleMutation;
|
||||||
@@ -2,6 +2,7 @@ use crate::domain::rolle::{
|
|||||||
model::{Rolle, RolleErstelleInput, RolleLoeschenInput, RolleUpdateInput},
|
model::{Rolle, RolleErstelleInput, RolleLoeschenInput, RolleUpdateInput},
|
||||||
service::Service,
|
service::Service,
|
||||||
};
|
};
|
||||||
|
|
||||||
use async_graphql::{Context, FieldResult};
|
use async_graphql::{Context, FieldResult};
|
||||||
use sqlx::postgres::PgPool;
|
use sqlx::postgres::PgPool;
|
||||||
|
|
||||||
@@ -21,6 +22,17 @@ impl RolleMutation {
|
|||||||
Ok(gruppe)
|
Ok(gruppe)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn erstelle_viele_rollen(
|
||||||
|
&self,
|
||||||
|
ctx: &Context<'_>,
|
||||||
|
input: Vec<RolleErstelleInput>,
|
||||||
|
) -> FieldResult<Vec<Rolle>> {
|
||||||
|
let pool = ctx.data::<PgPool>()?.clone();
|
||||||
|
|
||||||
|
let typen = Service::new(pool).rolle_erstellen_viele(&input).await?;
|
||||||
|
Ok(typen)
|
||||||
|
}
|
||||||
|
|
||||||
async fn update_rolle(&self, ctx: &Context<'_>, input: RolleUpdateInput) -> FieldResult<Rolle> {
|
async fn update_rolle(&self, ctx: &Context<'_>, input: RolleUpdateInput) -> FieldResult<Rolle> {
|
||||||
let pool = ctx.data::<PgPool>()?;
|
let pool = ctx.data::<PgPool>()?;
|
||||||
|
|
||||||
@@ -2,6 +2,7 @@ mod find_all_rolle;
|
|||||||
mod find_rolle_by_id;
|
mod find_rolle_by_id;
|
||||||
mod rolle_alle;
|
mod rolle_alle;
|
||||||
mod rolle_dataloader;
|
mod rolle_dataloader;
|
||||||
|
mod rolle_erstelle_viele;
|
||||||
mod rolle_erstellen;
|
mod rolle_erstellen;
|
||||||
mod rolle_loeschen;
|
mod rolle_loeschen;
|
||||||
mod rolle_update;
|
mod rolle_update;
|
||||||
|
|||||||
43
src/domain/rolle/repository/rolle_erstelle_viele.rs
Normal file
43
src/domain/rolle/repository/rolle_erstelle_viele.rs
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
use anyhow::Error;
|
||||||
|
|
||||||
|
use super::Repository;
|
||||||
|
use crate::database::Queryer;
|
||||||
|
use crate::domain::rolle::entity;
|
||||||
|
use crate::domain::rolle::model::{self};
|
||||||
|
use crate::scalar::{Id, Time, Ulid};
|
||||||
|
|
||||||
|
impl Repository {
|
||||||
|
pub async fn rolle_viele_erstellen<'c, C: Queryer<'c>>(
|
||||||
|
&self,
|
||||||
|
db: C,
|
||||||
|
rollen: &[entity::RolleErstellen],
|
||||||
|
) -> Result<Vec<model::Rolle>, Error> {
|
||||||
|
let rolle_id: Vec<Id> = rollen.iter().map(|t| t.rolle_id).collect();
|
||||||
|
let id: Vec<Ulid> = rollen.iter().map(|t| t.id).collect();
|
||||||
|
let rollenname: Vec<String> = rollen.iter().map(|t| t.rollenname.clone()).collect();
|
||||||
|
let erstellt_am: Vec<Time> = rollen.iter().map(|t| t.erstellt_am).collect();
|
||||||
|
let geaendert_am: Vec<Time> = rollen.iter().map(|t| t.geaendert_am).collect();
|
||||||
|
|
||||||
|
const QUERY: &str = r#"
|
||||||
|
INSERT INTO rollen (rolle_id, id, rollenname, erstellt_am, geaendert_am)
|
||||||
|
SELECT * FROM UNNEST(
|
||||||
|
$1::uuid[],
|
||||||
|
$2::text[],
|
||||||
|
$3::text[],
|
||||||
|
$4::TIMESTAMP[],
|
||||||
|
$5::TIMESTAMP[]
|
||||||
|
) RETURNING id, rollenname, erstellt_am, geaendert_am;
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let typen = sqlx::query_as::<_, model::Rolle>(QUERY)
|
||||||
|
.bind(rolle_id)
|
||||||
|
.bind(id)
|
||||||
|
.bind(rollenname)
|
||||||
|
.bind(erstellt_am)
|
||||||
|
.bind(geaendert_am)
|
||||||
|
.fetch_all(db)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(typen)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
mod rolle_alle;
|
mod rolle_alle;
|
||||||
mod rolle_dataloader;
|
mod rolle_dataloader;
|
||||||
mod rolle_erstellen;
|
mod rolle_erstellen;
|
||||||
|
mod rolle_erstellen_viele;
|
||||||
mod rolle_loeschen;
|
mod rolle_loeschen;
|
||||||
mod rolle_update;
|
mod rolle_update;
|
||||||
|
|
||||||
|
|||||||
36
src/domain/rolle/service/rolle_erstellen_viele.rs
Normal file
36
src/domain/rolle/service/rolle_erstellen_viele.rs
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
use anyhow::Error;
|
||||||
|
use chrono::Utc;
|
||||||
|
|
||||||
|
use super::Service;
|
||||||
|
use crate::{
|
||||||
|
domain::rolle::{
|
||||||
|
entity,
|
||||||
|
model::{self, RolleErstelleInput},
|
||||||
|
},
|
||||||
|
scalar::Ulid,
|
||||||
|
};
|
||||||
|
|
||||||
|
impl Service {
|
||||||
|
pub async fn rolle_erstellen_viele(
|
||||||
|
&self,
|
||||||
|
input: &[RolleErstelleInput],
|
||||||
|
) -> Result<Vec<model::Rolle>, Error> {
|
||||||
|
let rollen_erstellen: Vec<entity::RolleErstellen> = input
|
||||||
|
.iter()
|
||||||
|
.map(|t| entity::RolleErstellen {
|
||||||
|
rolle_id: ulid::Ulid::new().into(),
|
||||||
|
id: Ulid(ulid::Ulid::new()),
|
||||||
|
rollenname: t.rollenname.clone(),
|
||||||
|
erstellt_am: Utc::now(),
|
||||||
|
geaendert_am: Utc::now(),
|
||||||
|
})
|
||||||
|
.collect();
|
||||||
|
|
||||||
|
let typen = self
|
||||||
|
.repo
|
||||||
|
.rolle_viele_erstellen(&self.db, &rollen_erstellen)
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
Ok(typen)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,11 +3,10 @@ pub mod gruppe;
|
|||||||
// pub mod hersteller;
|
// pub mod hersteller;
|
||||||
// pub mod modell;
|
// pub mod modell;
|
||||||
pub mod liegenschaft;
|
pub mod liegenschaft;
|
||||||
pub mod rolle;
|
|
||||||
|
|
||||||
use async_graphql::MergedObject;
|
use async_graphql::MergedObject;
|
||||||
|
|
||||||
use crate::domain::typ::mutation::TypMutation;
|
use crate::domain::{rolle::mutation::rolle, typ::mutation::TypMutation};
|
||||||
|
|
||||||
#[derive(MergedObject, Default)]
|
#[derive(MergedObject, Default)]
|
||||||
pub struct Mutation(
|
pub struct Mutation(
|
||||||
|
|||||||
@@ -17,5 +17,4 @@ pub struct Query(
|
|||||||
rolle::RolleQuery,
|
rolle::RolleQuery,
|
||||||
gruppe::GruppeQuery,
|
gruppe::GruppeQuery,
|
||||||
liegenschaft::LiegenschaftQuery, // modell::ModellQuery,
|
liegenschaft::LiegenschaftQuery, // modell::ModellQuery,
|
||||||
// hersteller::HerstellerQuery,
|
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -63,4 +63,8 @@ impl PgHasArrayType for Ulid {
|
|||||||
fn array_type_info() -> PgTypeInfo {
|
fn array_type_info() -> PgTypeInfo {
|
||||||
<String as PgHasArrayType>::array_type_info()
|
<String as PgHasArrayType>::array_type_info()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn array_compatible(ty: &PgTypeInfo) -> bool {
|
||||||
|
<String as PgHasArrayType>::array_compatible(ty)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user