From 4f456322fc0d405dbd95918ce7fbea75691cd49b Mon Sep 17 00:00:00 2001 From: Claudio Ortolina Date: Sat, 21 Dec 2024 14:38:39 +0000 Subject: [PATCH] Bootstrap the /api namespace --- .../controllers/collection_controller.ex | 11 +++++++++++ .../controllers/collection_json.ex | 5 +++++ lib/music_library_web/router.ex | 6 ++++++ .../controllers/collection_controller_test.exs | 18 ++++++++++++++++++ 4 files changed, 40 insertions(+) create mode 100644 lib/music_library_web/controllers/collection_controller.ex create mode 100644 lib/music_library_web/controllers/collection_json.ex create mode 100644 test/music_library_web/controllers/collection_controller_test.exs diff --git a/lib/music_library_web/controllers/collection_controller.ex b/lib/music_library_web/controllers/collection_controller.ex new file mode 100644 index 00000000..93500fe0 --- /dev/null +++ b/lib/music_library_web/controllers/collection_controller.ex @@ -0,0 +1,11 @@ +defmodule MusicLibraryWeb.CollectionController do + use MusicLibraryWeb, :controller + + alias MusicLibrary.Collection + + def latest(conn, _params) do + latest_record = Collection.get_latest_record!() + + render(conn, :show, record: latest_record) + end +end diff --git a/lib/music_library_web/controllers/collection_json.ex b/lib/music_library_web/controllers/collection_json.ex new file mode 100644 index 00000000..d9302f34 --- /dev/null +++ b/lib/music_library_web/controllers/collection_json.ex @@ -0,0 +1,5 @@ +defmodule MusicLibraryWeb.CollectionJSON do + def show(%{record: record}) do + Map.take(record, [:title]) + end +end diff --git a/lib/music_library_web/router.ex b/lib/music_library_web/router.ex index ebebb304..41dd10e7 100644 --- a/lib/music_library_web/router.ex +++ b/lib/music_library_web/router.ex @@ -50,6 +50,12 @@ defmodule MusicLibraryWeb.Router do end end + scope "/api", MusicLibraryWeb do + pipe_through :api + + get "/collection/latest", CollectionController, :latest + end + # Other scopes may use custom stacks. # scope "/api", MusicLibraryWeb do # pipe_through :api diff --git a/test/music_library_web/controllers/collection_controller_test.exs b/test/music_library_web/controllers/collection_controller_test.exs new file mode 100644 index 00000000..293db4fb --- /dev/null +++ b/test/music_library_web/controllers/collection_controller_test.exs @@ -0,0 +1,18 @@ +defmodule MusicLibraryWeb.CollectionControllerTest do + use MusicLibraryWeb.ConnCase + + import MusicLibrary.RecordsFixtures + + defp create_record(_) do + %{record: record_fixture()} + end + + describe "GET /api/collection/latest" do + setup [:create_record] + + test "it returns the latest record", %{conn: conn, record: record} do + conn = get(conn, ~p"/api/collection/latest") + assert json_response(conn, 200) == %{"title" => record.title} + end + end +end