Merge branch 'develop' into feature/title

This commit is contained in:
sphericalkat authored and GitHub committed 2022-05-28 10:39:47 +05:30
commit 97aa091b9a
22 files changed
+991 -812

No files matched your search

@@ -0,0 +1,45 @@
defmodule KetbinWeb.Api.PasteController do
use KetbinWeb, :controller
alias Ketbin.Pastes
alias Ketbin.Pastes.Utils
def show(conn, %{"id" => id}) do
[head | _tail] = String.split(id, ".")
# fetch paste from db
paste = Pastes.get_paste!(head)
render(conn, "paste.json", paste: paste)
end
def create(%{assigns: %{current_user: current_user}} = conn, %{"paste" => paste_params}) do
# generate phonetic key
id = Utils.generate_key()
# check if content is a url
is_url =
Map.get(paste_params, "content")
|> Utils.is_url?()
# put id and is_url values into changeset
paste_params =
Map.put(paste_params, "id", id)
|> Map.put("is_url", is_url)
|> Map.put("belongs_to", current_user && current_user.id)
# attempt to create a paste
case Pastes.create_paste(paste_params) do
# all good
{:ok, paste} ->
conn
|> put_status(:created)
|> render("paste.json", paste: paste)
# something went wrong, bail
{:error, %Ecto.Changeset{} = _changeset} ->
conn
|> put_status(:internal_server_error)
|> render("error.json")
end
end
end
+14 -4
View File
@@ -38,7 +38,7 @@ defmodule KetbinWeb.PageController do
[head | tail] = String.split(id, ".")
paste = Pastes.get_paste!(head)
render(conn, "show.html",
render(conn, "shorten.html",
paste: paste,
show_edit: show_edit,
extension: if(tail == [], do: "", else: tail),
@@ -52,8 +52,12 @@ defmodule KetbinWeb.PageController do
end
def create(%{assigns: %{current_user: current_user}} = conn, %{"paste" => paste_params}) do
# generate phonetic key
id = Utils.generate_key()
# if custom url exists, use it as id, else generate phonetic id
id =
case Map.get(paste_params, "custom_url", "") do
custom_url when custom_url != "" -> custom_url
_ -> Utils.generate_key()
end
# check if content is a url
is_url =
@@ -82,7 +86,13 @@ defmodule KetbinWeb.PageController do
# something went wrong, bail
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, "index.html", changeset: changeset)
case changeset.errors[:id] do
{"has already been taken", _} ->
render(conn, "index.html", changeset: changeset, already_taken: true)
_ ->
render(conn, "index.html", changeset: changeset)
end
end
end