Skip to content

Instantly share code, notes, and snippets.

@Mr-Malomz
Created July 24, 2022 10:49
Show Gist options
  • Save Mr-Malomz/eaca1902e929d262098b475f205d8368 to your computer and use it in GitHub Desktop.
Save Mr-Malomz/eaca1902e929d262098b475f205d8368 to your computer and use it in GitHub Desktop.
use crate::{
config::mongo::DBMongo,
schemas::project_schema::{
CreateOwner, CreateProject, FetchOwner, FetchProject, Owner, Project,
},
};
use async_graphql::{Context, EmptySubscription, FieldResult, Object, Schema};
pub struct Query;
#[Object(extends)]
impl Query {
//owners query
async fn owner(&self, ctx: &Context<'_>, input: FetchOwner) -> FieldResult<Owner> {
let db = &ctx.data_unchecked::<DBMongo>();
let owner = db.single_owner(&input._id).unwrap();
Ok(owner)
}
async fn get_owners(&self, ctx: &Context<'_>) -> FieldResult<Vec<Owner>> {
let db = &ctx.data_unchecked::<DBMongo>();
let owners = db.get_owners().unwrap();
Ok(owners)
}
//projects query
async fn project(&self, ctx: &Context<'_>, input: FetchProject) -> FieldResult<Project> {
let db = &ctx.data_unchecked::<DBMongo>();
let project = db.single_project(&input._id).unwrap();
Ok(project)
}
async fn get_projects(&self, ctx: &Context<'_>) -> FieldResult<Vec<Project>> {
let db = &ctx.data_unchecked::<DBMongo>();
let projects = db.get_projects().unwrap();
Ok(projects)
}
}
pub struct Mutation;
#[Object]
impl Mutation {
//owner mutation
async fn create_owner(&self, ctx: &Context<'_>, input: CreateOwner) -> FieldResult<Owner> {
let db = &ctx.data_unchecked::<DBMongo>();
let new_owner = Owner {
_id: None,
email: input.email,
name: input.name,
phone: input.phone,
};
let owner = db.create_owner(new_owner).unwrap();
Ok(owner)
}
async fn create_project(
&self,
ctx: &Context<'_>,
input: CreateProject,
) -> FieldResult<Project> {
let db = &ctx.data_unchecked::<DBMongo>();
let new_project = Project {
_id: None,
owner_id: input.owner_id,
name: input.name,
description: input.description,
status: input.status,
};
let project = db.create_project(new_project).unwrap();
Ok(project)
}
}
pub type ProjectSchema = Schema<Query, Mutation, EmptySubscription>;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment