use crate::graphql::schema::{CreateOwner, CreateProject, Owner, Project};
use async_graphql::{Context, FieldResult, Object};
use crate::graphql::service;
pub struct Mutation;
#[Object]
impl Mutation {
async fn create_owner(&self, ctx: &Context<'_>, input: CreateOwner) -> FieldResult<Owner> {
let web_ctx = ctx.data_unchecked::<actix_web::web::Data<crate::server::AppContext>>();
let new_owner = Owner {
id: None,
email: input.email,
name: input.name,
phone: input.phone,
};
let owner = service::create_owner(web_ctx.mongo(), new_owner)
.await
.unwrap();
if let Some(s) = owner {
Ok(s)
} else {
Err(async_graphql::Error::new("create owner failed."))
}
}
async fn create_project(
&self,
ctx: &Context<'_>,
input: CreateProject,
) -> FieldResult<Project> {
let web_ctx = ctx.data_unchecked::<actix_web::web::Data<crate::server::AppContext>>();
let new_project = Project {
id: None,
owner_id: input.owner_id,
name: input.name,
description: input.description,
status: input.status,
};
let project = service::create_project(web_ctx.mongo(), new_project)
.await
.unwrap();
if let Some(s) = project {
Ok(s)
} else {
Err(async_graphql::Error::new("create project failed."))
}
}
}