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 { let connection = &mut database.pool.get()?; let typ = diesel::insert_into(typen::table) .values(&typ_input) .get_result::(connection)?; Ok(typ) } fn edit_typ( #[graphql(context)] database: &Database, typ_id: i32, typ_name: String, ) -> FieldResult { 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::(connection)?; Ok(update_typ) } fn delete_typ(#[graphql(context)] database: &Database, typ_id: i32) -> FieldResult { 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()) } }