axum_juniper/src/mutation.rs
2024-05-24 14:25:46 +02:00

48 lines
1.3 KiB
Rust

use crate::{
database::Database,
models::typ::{Typ, TypInput},
schema::typen,
};
use diesel::prelude::*;
use juniper::{graphql_object, FieldResult};
#[derive(Clone, Copy, Debug)]
pub struct Mutation;
#[graphql_object(context = Database)]
impl Mutation {
fn new_typ(#[graphql(context)] database: &Database, typ_input: TypInput) -> FieldResult<Typ> {
let connection = &mut database.pool.get()?;
let typ = diesel::insert_into(typen::table)
.values(&typ_input)
.get_result::<Typ>(connection)?;
Ok(typ)
}
fn edit_typ(
#[graphql(context)] database: &Database,
typ_id: i32,
typ_name: String,
) -> FieldResult<Typ> {
use crate::schema::typen::dsl::*;
let connection = &mut database.pool.get()?;
let update_typ = diesel::update(typen.find(typ_id))
.set(name.eq(typ_name))
.get_result::<Typ>(connection)?;
Ok(update_typ)
}
fn delete_typ(#[graphql(context)] database: &Database, typ_id: i32) -> FieldResult<String> {
use crate::schema::typen::dsl::*;
let conn = &mut database.pool.get()?;
diesel::delete(typen.find(typ_id)).execute(conn)?;
Ok("Typ wurde erfolgreich gelöscht".to_string())
}
}