Current section

Files

Jump to
shield web controllers client_controller.ex
Raw

web/controllers/client_controller.ex

defmodule Shield.ClientController do
use Shield.Web, :controller
use Shield.Authorization
@repo Application.get_env(:authable, :repo)
@client Application.get_env(:authable, :client)
@views Application.get_env(:shield, :views)
plug :scrub_params, "client" when action in [:create, :update]
plug :authenticate!
def index(conn, _params) do
query = (from c in @client,
where: c.user_id == ^conn.assigns[:current_user].id)
clients = @repo.all(query)
render(conn, @views[:client], "index.json", clients: clients)
end
def create(conn, %{"client" => client_params}) do
client_params = Map.put(client_params, "user_id",
conn.assigns[:current_user].id)
changeset = @client.changeset(%@client{}, client_params)
case @repo.insert(changeset) do
{:ok, client} ->
conn
|> put_status(:created)
|> put_resp_header("location", client_path(conn, :show, client))
|> render(@views[:client], "show.json", client: client)
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> render(@views[:changeset], "error.json",
changeset: changeset)
end
end
def show(conn, %{"id" => id}) do
case @repo.get_by(@client, id: id,
user_id: conn.assigns[:current_user].id) do
nil ->
conn
|> put_status(:not_found)
|> render(@views[:error], "404.json")
client ->
conn
|> render(@views[:client], "show.json", client: client)
end
end
def update(conn, %{"id" => id, "client" => client_params}) do
client = @repo.get_by!(@client, id: id,
user_id: conn.assigns[:current_user].id)
changeset = @client.changeset(client, client_params)
case @repo.update(changeset) do
{:ok, client} ->
conn
|> put_status(:ok)
|> render(@views[:client], "show.json", client: client)
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> render(@views[:changeset], "error.json",
changeset: changeset)
end
end
def delete(conn, %{"id" => id}) do
client = @repo.get_by!(@client, id: id,
user_id: conn.assigns[:current_user].id)
@repo.delete!(client)
send_resp(conn, :no_content, "")
end
end