Refactor the Links module.

main 0.4.8
KKlochko 2 years ago
parent dd0e79c400
commit c6236c0ef1

@ -36,4 +36,6 @@
Add the API to update the Link model. Add the API to update the Link model.
** 0.4.7 <2023-08-01 Tue> ** 0.4.7 <2023-08-01 Tue>
Add tests for the API. Add tests for the API.
** 0.4.8 <2023-08-02 Wed>
Refactor the Links module.

@ -1,4 +1,4 @@
defmodule LinkShortener.Links.Links do defmodule LinkShortener.Links do
use Ecto.Schema use Ecto.Schema
import Ecto.Changeset import Ecto.Changeset
import Ecto.Query import Ecto.Query
@ -6,11 +6,12 @@ defmodule LinkShortener.Links.Links do
alias LinkShortener.Links.Link alias LinkShortener.Links.Link
alias LinkShortener.Generators.SafeString 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 def create_one(attrs, length \\ 10, generator \\ SafeString) do
shorten = generator.generate(length) shorten = generator.generate(length)
insert_one(Map.put(attrs, :shorten, shorten)) Map.put(attrs, :shorten, shorten)
|> insert_one()
end end
def insert_one(attrs) do def insert_one(attrs) do
@ -19,25 +20,10 @@ defmodule LinkShortener.Links.Links do
|> Repo.insert() |> Repo.insert()
end end
def edit_one(id) do def get_one!(id) do
get_one(id) Repo.get!(Link, 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()
end end
def delete_one(%Link{} = link), do: Repo.delete(link)
def get_one_by(attrs) do def get_one_by(attrs) do
Repo.get_by(Link, attrs) Repo.get_by(Link, attrs)
end end
@ -46,12 +32,26 @@ defmodule LinkShortener.Links.Links do
get_one_by(%{shorten: shorten}) get_one_by(%{shorten: shorten})
end end
def get_one(id) do def get_all() do
Repo.get!(Link, id) from(Link)
|> Repo.all()
end end
def get_all(opts) do def get_all(opts) do
from(Link) from(Link)
|> Repo.all() |> Repo.all()
end 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 end

@ -1,13 +1,13 @@
defmodule LinkShortenerWeb.Api.V1.LinkController do defmodule LinkShortenerWeb.Api.V1.LinkController do
use LinkShortenerWeb, :controller use LinkShortenerWeb, :controller
alias LinkShortener.Links.Links alias LinkShortener.Links
alias LinkShortener.Links.Link alias LinkShortener.Links.Link
action_fallback LinkShortenerWeb.FallbackController action_fallback LinkShortenerWeb.FallbackController
def index(conn, _params) do def index(conn, _params) do
links = Links.get_all({}) links = Links.get_all()
render(conn, "index.json", links: links) render(conn, "index.json", links: links)
end end
@ -21,12 +21,12 @@ defmodule LinkShortenerWeb.Api.V1.LinkController do
end end
def show(conn, %{"id" => id}) do def show(conn, %{"id" => id}) do
link = Links.get_one(id) link = Links.get_one!(id)
render(conn, "show.json", link: link) render(conn, "show.json", link: link)
end end
def update(conn, %{"id" => id, "link" => link_params}) do 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 with {:ok, %Link{} = link} <- Links.update_one(link, link_params) do
render(conn, "show.json", link: link) render(conn, "show.json", link: link)
@ -34,7 +34,7 @@ defmodule LinkShortenerWeb.Api.V1.LinkController do
end end
def delete(conn, %{"id" => id}) do def delete(conn, %{"id" => id}) do
link = Links.get_one(id) link = Links.get_one!(id)
with {:ok, %Link{}} <- Links.delete_one(link) do with {:ok, %Link{}} <- Links.delete_one(link) do
send_resp(conn, :no_content, "") send_resp(conn, :no_content, "")

@ -4,7 +4,7 @@ defmodule LinkShortenerWeb.Api.V1.LinkControllerTest do
import LinkShortener.LinksFixtures import LinkShortener.LinksFixtures
alias LinkShortener.Links.Link alias LinkShortener.Links.Link
alias LinkShortener.Links.Links alias LinkShortener.Links
@create_attrs %{ @create_attrs %{
name: "some link name", name: "some link name",

@ -4,7 +4,7 @@ defmodule LinkShortener.LinksFixtures do
entities via the `LinkShortener.Links` context. entities via the `LinkShortener.Links` context.
""" """
alias LinkShortener.Links.Links alias LinkShortener.Links
@doc """ @doc """
Generate a link. Generate a link.

Loading…
Cancel
Save