From 931e22d0f7600479d72b02da075240b839ce66ea Mon Sep 17 00:00:00 2001 From: Kevin ANATOLE Date: Sat, 18 Feb 2023 09:29:20 +0000 Subject: [PATCH] endpoint to register --- lib/phoenix_api_template/profiles.ex | 5 +++-- .../controllers/user_controller.ex | 11 ++++++++--- lib/phoenix_api_template_web/router.ex | 1 + lib/phoenix_api_template_web/views/user_view.ex | 8 ++++++++ test_requests/register.http | 12 ++++++++---- 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/lib/phoenix_api_template/profiles.ex b/lib/phoenix_api_template/profiles.ex index 22c0fb1..f0d19e8 100644 --- a/lib/phoenix_api_template/profiles.ex +++ b/lib/phoenix_api_template/profiles.ex @@ -49,8 +49,9 @@ defmodule PhoenixApiTemplate.Profiles do {:error, %Ecto.Changeset{}} """ - def create_profile(attrs \\ %{}) do - %Profile{} + def create_profile(user, attrs \\ %{}) do + user + |> Ecto.build_assoc(:profile) |> Profile.changeset(attrs) |> Repo.insert() end diff --git a/lib/phoenix_api_template_web/controllers/user_controller.ex b/lib/phoenix_api_template_web/controllers/user_controller.ex index 3098cd5..d30d2f7 100644 --- a/lib/phoenix_api_template_web/controllers/user_controller.ex +++ b/lib/phoenix_api_template_web/controllers/user_controller.ex @@ -1,8 +1,11 @@ defmodule PhoenixApiTemplateWeb.UserController do use PhoenixApiTemplateWeb, :controller + alias PhoenixApiTemplateWeb.Auth.Guardian alias PhoenixApiTemplate.Accounts alias PhoenixApiTemplate.Accounts.User + alias PhoenixApiTemplate.Profiles + alias PhoenixApiTemplate.Profiles.Profile action_fallback(PhoenixApiTemplateWeb.FallbackController) @@ -11,11 +14,13 @@ defmodule PhoenixApiTemplateWeb.UserController do render(conn, "index.json", users: users) end - def create(conn, %{"user" => user_params}) do - with {:ok, %User{} = user} <- Accounts.create_user(user_params) do + def create(conn, %{"user" => %{"profile" => profile_params} = user_params}) do + with {:ok, %User{} = user} <- Accounts.create_user(user_params), + {:ok, token, _claims} <- Guardian.encode_and_sign(user), + {:ok, %Profile{} = _profile} <- Profiles.create_profile(user, profile_params) do conn |> put_status(:created) - |> render("show.json", user: user) + |> render("user_token.json", user: user, token: token) end end diff --git a/lib/phoenix_api_template_web/router.ex b/lib/phoenix_api_template_web/router.ex index 152cb53..ad38dbf 100644 --- a/lib/phoenix_api_template_web/router.ex +++ b/lib/phoenix_api_template_web/router.ex @@ -9,5 +9,6 @@ defmodule PhoenixApiTemplateWeb.Router do pipe_through(:api) get("/", DefaultController, :index) + post("/register", UserController, :create) end end diff --git a/lib/phoenix_api_template_web/views/user_view.ex b/lib/phoenix_api_template_web/views/user_view.ex index dd9cc03..e0e2dd6 100644 --- a/lib/phoenix_api_template_web/views/user_view.ex +++ b/lib/phoenix_api_template_web/views/user_view.ex @@ -17,4 +17,12 @@ defmodule PhoenixApiTemplateWeb.UserView do hashed_password: user.hashed_password } end + + def render("user_token.json", %{user: user, token: token}) do + %{ + id: user.id, + email: user.email, + token: token + } + end end diff --git a/test_requests/register.http b/test_requests/register.http index 956219d..f18f612 100644 --- a/test_requests/register.http +++ b/test_requests/register.http @@ -1,10 +1,14 @@ -POST http://localhost:4000/api/users HTTP/1.1 +POST http://localhost:4000/api/register HTTP/1.1 content-type: application/json { - "quotation": { + "user": { - "author": "Dennis Ritchie", - "text": "The only way to learn a new programming language is by writing programs in it" + "email": "test4@yopmail.com", + "hashed_password": "yolo", + "profile": { + "display_name": "test user" + } } } + \ No newline at end of file