From 96a3e2e9f0ce7fd83d59d383c5f4cd17315ad673 Mon Sep 17 00:00:00 2001 From: Joao P Dubas Date: Thu, 24 Jun 2021 00:25:47 +0000 Subject: [PATCH] [day-03] add mutation to create user 1. Add input type to receive user details 2. Add resolver to create user 3. Configure mutation in root type 4. Aggregate mutations in schema --- lib/wabanex_web/resolvers/user.ex | 2 ++ lib/wabanex_web/schema.ex | 4 ++++ lib/wabanex_web/schema/types/root.ex | 8 ++++++++ lib/wabanex_web/schema/types/user.ex | 6 ++++++ 4 files changed, 20 insertions(+) diff --git a/lib/wabanex_web/resolvers/user.ex b/lib/wabanex_web/resolvers/user.ex index 572c44c..219edb1 100644 --- a/lib/wabanex_web/resolvers/user.ex +++ b/lib/wabanex_web/resolvers/user.ex @@ -2,4 +2,6 @@ defmodule WabanexWeb.Resolvers.User do alias Wabanex.Users def get(%{id: user_id}, _context), do: Users.Get.call(user_id) + + def create(%{input: params}, _context), do: Users.Create.call(params) end diff --git a/lib/wabanex_web/schema.ex b/lib/wabanex_web/schema.ex index c86ec20..e4b30ed 100644 --- a/lib/wabanex_web/schema.ex +++ b/lib/wabanex_web/schema.ex @@ -6,4 +6,8 @@ defmodule WabanexWeb.Schema do query do import_fields :root_query end + + mutation do + import_fields :root_mutation + end end diff --git a/lib/wabanex_web/schema/types/root.ex b/lib/wabanex_web/schema/types/root.ex index 3c8a748..f8f2ac2 100644 --- a/lib/wabanex_web/schema/types/root.ex +++ b/lib/wabanex_web/schema/types/root.ex @@ -12,4 +12,12 @@ defmodule WabanexWeb.Schema.Types.Root do resolve &UserResolver.get/2 end end + + object :root_mutation do + field :create_user, type: :user do + arg :input, non_null(:create_user_input) + + resolve &UserResolver.create/2 + end + end end diff --git a/lib/wabanex_web/schema/types/user.ex b/lib/wabanex_web/schema/types/user.ex index e1e0187..a5623d6 100644 --- a/lib/wabanex_web/schema/types/user.ex +++ b/lib/wabanex_web/schema/types/user.ex @@ -9,4 +9,10 @@ defmodule WabanexWeb.Schema.Types.User do field :name, non_null(:string) field :email, non_null(:string) end + + input_object :create_user_input do + field :name, non_null(:string), description: "User name" + field :email, non_null(:string), description: "User email" + field :password, non_null(:string), description: "User password" + end end