diff --git a/CHANGELOG.org b/CHANGELOG.org index 4d98f2b..0ef4d0a 100644 --- a/CHANGELOG.org +++ b/CHANGELOG.org @@ -36,4 +36,6 @@ Add the API to update the Link model. ** 0.4.7 <2023-08-01 Tue> Add tests for the API. +** 0.4.8 <2023-08-02 Wed> + Refactor the Links module. diff --git a/lib/link_shortener/links/links.ex b/lib/link_shortener/links/links.ex index 412c8e1..1092aac 100644 --- a/lib/link_shortener/links/links.ex +++ b/lib/link_shortener/links/links.ex @@ -1,4 +1,4 @@ -defmodule LinkShortener.Links.Links do +defmodule LinkShortener.Links do use Ecto.Schema import Ecto.Changeset import Ecto.Query @@ -6,11 +6,12 @@ defmodule LinkShortener.Links.Links do alias LinkShortener.Links.Link alias LinkShortener.Generators.SafeString - def new_one(), do: Link.changeset(%Link{}) + def new_one(), do: Link.changeset(%Link{}, %{}) def create_one(attrs, length \\ 10, generator \\ SafeString) do shorten = generator.generate(length) - insert_one(Map.put(attrs, :shorten, shorten)) + Map.put(attrs, :shorten, shorten) + |> insert_one() end def insert_one(attrs) do @@ -19,25 +20,10 @@ defmodule LinkShortener.Links.Links do |> Repo.insert() end - def edit_one(id) do - get_one(id) - |> Link.changeset() - end - - def update_one(%Link{} = link, changes) do - link - |> Link.changeset(changes) - |> Repo.update() - end - - def insert_one(attrs) do - %Link{} - |> Link.changeset(attrs) - |> Repo.insert() + def get_one!(id) do + Repo.get!(Link, id) end - def delete_one(%Link{} = link), do: Repo.delete(link) - def get_one_by(attrs) do Repo.get_by(Link, attrs) end @@ -46,12 +32,26 @@ defmodule LinkShortener.Links.Links do get_one_by(%{shorten: shorten}) end - def get_one(id) do - Repo.get!(Link, id) + def get_all() do + from(Link) + |> Repo.all() end def get_all(opts) do from(Link) |> Repo.all() end + + def edit_one(%Link{} = link) do + link + |> Link.changeset(%{}) + end + + def update_one(%Link{} = link, changes) do + link + |> Link.changeset(changes) + |> Repo.update() + end + + def delete_one(%Link{} = link), do: Repo.delete(link) end diff --git a/lib/link_shortener_web/controllers/api/v1/link_controller.ex b/lib/link_shortener_web/controllers/api/v1/link_controller.ex index 971a568..228e778 100644 --- a/lib/link_shortener_web/controllers/api/v1/link_controller.ex +++ b/lib/link_shortener_web/controllers/api/v1/link_controller.ex @@ -1,13 +1,13 @@ defmodule LinkShortenerWeb.Api.V1.LinkController do use LinkShortenerWeb, :controller - alias LinkShortener.Links.Links + alias LinkShortener.Links alias LinkShortener.Links.Link action_fallback LinkShortenerWeb.FallbackController def index(conn, _params) do - links = Links.get_all({}) + links = Links.get_all() render(conn, "index.json", links: links) end @@ -21,12 +21,12 @@ defmodule LinkShortenerWeb.Api.V1.LinkController do end def show(conn, %{"id" => id}) do - link = Links.get_one(id) + link = Links.get_one!(id) render(conn, "show.json", link: link) end def update(conn, %{"id" => id, "link" => link_params}) do - link = Links.get_one(id) + link = Links.get_one!(id) with {:ok, %Link{} = link} <- Links.update_one(link, link_params) do render(conn, "show.json", link: link) @@ -34,7 +34,7 @@ defmodule LinkShortenerWeb.Api.V1.LinkController do end def delete(conn, %{"id" => id}) do - link = Links.get_one(id) + link = Links.get_one!(id) with {:ok, %Link{}} <- Links.delete_one(link) do send_resp(conn, :no_content, "") diff --git a/test/link_shortener_web/controllers/api/v1/link_controller_test.exs b/test/link_shortener_web/controllers/api/v1/link_controller_test.exs index 67fca24..216051f 100644 --- a/test/link_shortener_web/controllers/api/v1/link_controller_test.exs +++ b/test/link_shortener_web/controllers/api/v1/link_controller_test.exs @@ -4,7 +4,7 @@ defmodule LinkShortenerWeb.Api.V1.LinkControllerTest do import LinkShortener.LinksFixtures alias LinkShortener.Links.Link - alias LinkShortener.Links.Links + alias LinkShortener.Links @create_attrs %{ name: "some link name", diff --git a/test/support/fixtures/links_fixtures.ex b/test/support/fixtures/links_fixtures.ex index 2d8cd99..115ab82 100644 --- a/test/support/fixtures/links_fixtures.ex +++ b/test/support/fixtures/links_fixtures.ex @@ -4,7 +4,7 @@ defmodule LinkShortener.LinksFixtures do entities via the `LinkShortener.Links` context. """ - alias LinkShortener.Links.Links + alias LinkShortener.Links @doc """ Generate a link.