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.
** 0.4.7 <2023-08-01 Tue>
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
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

@ -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, "")

@ -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",

@ -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.

Loading…
Cancel
Save