48 lines
1.3 KiB
Rust
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())
|
||
|
}
|
||
|
}
|