diff --git a/CHANGELOG.org b/CHANGELOG.org index 612e2de..6b2f682 100644 --- a/CHANGELOG.org +++ b/CHANGELOG.org @@ -26,4 +26,5 @@ ** 0.4.3 <2023-07-31 Mon> Rename the controller and the view names to "Link". Move Links to the Links context. + Refactor to split the Links to a Link model and a Links logic. diff --git a/lib/link_shortener/links/link.ex b/lib/link_shortener/links/link.ex new file mode 100644 index 0000000..a3844ee --- /dev/null +++ b/lib/link_shortener/links/link.ex @@ -0,0 +1,21 @@ +defmodule LinkShortener.Links.Link do + use Ecto.Schema + import Ecto.Changeset + import Ecto.Query + + schema "links" do + field :name, :string + field :url, :string + field :shorten, :string + + timestamps() + end + + @doc false + def changeset(link, attrs) do + link + |> cast(attrs, [:name, :url, :shorten]) + |> validate_required([:url, :shorten]) + |> unique_constraint(:shorten) + end +end diff --git a/lib/link_shortener/links/links.ex b/lib/link_shortener/links/links.ex index 34626d1..75fa2a8 100644 --- a/lib/link_shortener/links/links.ex +++ b/lib/link_shortener/links/links.ex @@ -1,28 +1,12 @@ -defmodule LinkShortener.Links do +defmodule LinkShortener.Links.Links do use Ecto.Schema import Ecto.Changeset import Ecto.Query alias LinkShortener.Repo - alias LinkShortener.Links + alias LinkShortener.Links.Link alias LinkShortener.Generators.SafeString - schema "links" do - field :name, :string - field :url, :string - field :shorten, :string - - timestamps() - end - - @doc false - def changeset(link, attrs) do - link - |> cast(attrs, [:name, :url, :shorten]) - |> validate_required([:url, :shorten]) - |> unique_constraint(:shorten) - end - - def new_one(), do: Links.changeset(%Links{}) + def new_one(), do: Link.changeset(%Link{}) def create_one(attrs, length \\ 10, generator \\ SafeString) do shorten = generator.generate(length) @@ -30,32 +14,32 @@ defmodule LinkShortener.Links do end def insert_one(attrs) do - %Links{} - |> Links.changeset(attrs) + %Link{} + |> Link.changeset(attrs) |> Repo.insert() end def edit_one(id) do get_one(id) - |> Links.changeset() + |> Link.changeset() end - def update_one(%Links{} = Links, changes) do - Links - |> Links.changeset(changes) + def update_one(%Link{} = link, changes) do + Link + |> Link.changeset(changes) |> Repo.update() end def insert_one(attrs) do - %Links{} - |> Links.changeset(attrs) + %Link{} + |> Link.changeset(attrs) |> Repo.insert() end - def delete_one(%Links{} = Links), do: Repo.delete(Links) + def delete_one(%Link{} = link), do: Repo.delete(link) def get_one_by(attrs) do - Repo.get_by(Links, attrs) + Repo.get_by(Link, attrs) end def get_one_by_shorten(shorten) do @@ -63,11 +47,11 @@ defmodule LinkShortener.Links do end def get_one(id) do - Repo.get!(Links, id) + Repo.get!(Link, id) end def get_all(opts) do - from(Links) + from(Link) |> Repo.all() end end