You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.2 KiB
68 lines
1.2 KiB
defmodule LinkShortener.Links do
|
|
use Ecto.Schema
|
|
import Ecto.Changeset
|
|
import Ecto.Query
|
|
alias LinkShortener.Repo
|
|
alias LinkShortener.Links
|
|
|
|
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 insert_one(attrs) do
|
|
%Links{}
|
|
|> Links.changeset(attrs)
|
|
|> Repo.insert()
|
|
end
|
|
|
|
def edit_one(id) do
|
|
get_one(id)
|
|
|> Links.changeset()
|
|
end
|
|
|
|
def update_one(%Links{} = Links, changes) do
|
|
Links
|
|
|> Links.changeset(changes)
|
|
|> Repo.update()
|
|
end
|
|
|
|
def insert_one(attrs) do
|
|
%Links{}
|
|
|> Links.changeset(attrs)
|
|
|> Repo.insert()
|
|
end
|
|
|
|
def delete_one(%Links{} = Links), do: Repo.delete(Links)
|
|
|
|
def get_one_by(attrs) do
|
|
Repo.get_by(Links, attrs)
|
|
end
|
|
|
|
def get_one_by_name(name) do
|
|
get_one_by(%{name: name})
|
|
end
|
|
|
|
def get_one(id) do
|
|
Repo.get!(Links, id)
|
|
end
|
|
|
|
def get_all(opts) do
|
|
from(Links)
|
|
|> Repo.all()
|
|
end
|
|
end
|