diff --git a/src/handler/test_handler.rs b/src/handler/test_handler.rs index 795b5fe..37ffd62 100644 --- a/src/handler/test_handler.rs +++ b/src/handler/test_handler.rs @@ -1,26 +1,38 @@ -use crate::models; +use crate::models::test::TestObj; use crate::usecase; -use async_graphql::Object; +use async_graphql::{Error, InputObject, MergedObject, Object, SimpleObject}; #[derive(Default)] pub struct TestQuery; #[Object] impl TestQuery { - async fn get_obj(&self) -> models::test::TestObj { + async fn obj(&self) -> TestObj { usecase::test::get_obj() } } +#[derive(Default, MergedObject)] +pub struct TestMutation(CreateTestObjMutation); + #[derive(Default)] -pub struct TestMutation; +pub struct CreateTestObjMutation; + +#[derive(InputObject)] +pub struct CreateTestObjInput { + pub name: String, + pub num: usize, +} + +#[derive(SimpleObject, Debug)] +pub struct CreateTestObjPayload { + pub obj: TestObj, +} #[Object] -impl TestMutation { - async fn create_obj( - &self, - input_obj: models::test::CreateTestObjInput, - ) -> Result { - usecase::test::create_obj(input_obj) +impl CreateTestObjMutation { + async fn create_obj(&self, input: CreateTestObjInput) -> Result { + let obj = usecase::test::create_obj(input.name, input.num)?; + Ok(CreateTestObjPayload { obj }) } } diff --git a/src/models/test.rs b/src/models/test.rs index 9ef2b9e..d67e857 100644 --- a/src/models/test.rs +++ b/src/models/test.rs @@ -1,4 +1,4 @@ -use async_graphql::{InputObject, SimpleObject}; +use async_graphql::SimpleObject; #[derive(SimpleObject, Debug)] pub struct TestObj { @@ -6,9 +6,3 @@ pub struct TestObj { pub name: String, pub num: usize, } - -#[derive(InputObject)] -pub struct CreateTestObjInput { - pub name: String, - pub num: usize, -} diff --git a/src/usecase/test.rs b/src/usecase/test.rs index b32d69c..7597020 100644 --- a/src/usecase/test.rs +++ b/src/usecase/test.rs @@ -1,17 +1,15 @@ -use crate::models; +use crate::models::test::TestObj; -pub fn get_obj() -> models::test::TestObj { - models::test::TestObj { +pub fn get_obj() -> TestObj { + TestObj { id: "test".to_string(), name: "test_name".to_string(), num: 1, } } -pub fn create_obj( - models::test::CreateTestObjInput { name, num }: models::test::CreateTestObjInput, -) -> Result { - let input = models::test::TestObj { +pub fn create_obj(name: String, num: usize) -> Result { + let input = TestObj { id: "test_input".to_string(), name, num,