46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Elixir
		
	
	
	
	
	
| 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
 | 
