From edf7be28fd564b6e527459bf495cb0ff684e3545 Mon Sep 17 00:00:00 2001 From: sorax Date: Thu, 23 Nov 2023 22:08:57 +0100 Subject: [PATCH] add: api-endpoint for creating nodes --- .../controllers/api/outline_controller.ex | 19 +++++++++++++++++++ lib/radiator_web/router.ex | 8 +++++--- .../api/outline_controller_test.exs | 16 ++++++++++++++++ 3 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 lib/radiator_web/controllers/api/outline_controller.ex create mode 100644 test/radiator_web/controllers/api/outline_controller_test.exs diff --git a/lib/radiator_web/controllers/api/outline_controller.ex b/lib/radiator_web/controllers/api/outline_controller.ex new file mode 100644 index 00000000..f2d8b918 --- /dev/null +++ b/lib/radiator_web/controllers/api/outline_controller.ex @@ -0,0 +1,19 @@ +defmodule RadiatorWeb.Api.OutlineController do + use RadiatorWeb, :controller + + alias Radiator.Outline + + def create(conn, %{"content" => content}) do + {:ok, node} = Outline.create_node(%{"content" => content}) + + conn + |> put_resp_content_type("application/json") + |> send_resp(200, Jason.encode!(%{uuid: node.uuid})) + end + + def create(conn, _params) do + conn + |> put_resp_content_type("application/json") + |> send_resp(500, Jason.encode!(%{error: "params"})) + end +end diff --git a/lib/radiator_web/router.ex b/lib/radiator_web/router.ex index 24fce602..e2273dca 100644 --- a/lib/radiator_web/router.ex +++ b/lib/radiator_web/router.ex @@ -24,9 +24,11 @@ defmodule RadiatorWeb.Router do end # Other scopes may use custom stacks. - # scope "/api", RadiatorWeb do - # pipe_through :api - # end + scope "/api", RadiatorWeb.Api do + pipe_through :api + + post "/v1/outline", OutlineController, :create + end # Enable LiveDashboard and Swoosh mailbox preview in development if Application.compile_env(:radiator, :dev_routes) do diff --git a/test/radiator_web/controllers/api/outline_controller_test.exs b/test/radiator_web/controllers/api/outline_controller_test.exs new file mode 100644 index 00000000..8db2d8ee --- /dev/null +++ b/test/radiator_web/controllers/api/outline_controller_test.exs @@ -0,0 +1,16 @@ +defmodule RadiatorWeb.Api.OutlineControllerTest do + use RadiatorWeb.ConnCase, async: true + + alias Radiator.Outline + + describe "POST /api/v1/outline" do + test "creates a node", %{conn: conn} do + body = %{"content" => "new node content"} + conn = post(conn, ~p"/api/v1/outline", body) + + %{"uuid" => uuid} = json_response(conn, 200) + + assert %{content: "new node content"} = Outline.get_node!(uuid) + end + end +end