zero4rs 2.0.0

zero4rs is a powerful, pragmatic, and extremely fast web framework for Rust
Documentation
use crate::graphql::schema::{CreateOwner, CreateProject, Owner, Project};

use async_graphql::{Context, FieldResult, Object};

use crate::graphql::service;

pub struct Mutation; // 新增或修改

#[Object]
impl Mutation {
    // owner mutation
    async fn create_owner(&self, ctx: &Context<'_>, input: CreateOwner) -> FieldResult<Owner> {
        // let mongo_client = &ctx.data_unchecked::<crate::core::mongo::MongoClient>();
        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 mongo_client = &ctx.data_unchecked::<crate::core::mongo::MongoClient>();
        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."))
        }
    }
}