Packages
A web application in pursuit of meaning in life.
Current section
Files
Jump to
Current section
Files
lib/udia_web/controllers/journey_controller.ex
defmodule UdiaWeb.JourneyController do
use UdiaWeb, :controller
import Ecto.Query
alias Udia.Logs
alias Udia.Logs.Journey
plug Guardian.Plug.EnsureAuthenticated, [handler: UdiaWeb.SessionController] when action in [:create, :update, :delete]
action_fallback UdiaWeb.FallbackController
def index(conn, params) do
page =
Journey
|> order_by(desc: :updated_at)
|> Udia.Repo.paginate(params)
journeys = page.entries
|> Udia.Repo.preload(:explorer)
render(conn, "index.json", journeys: journeys, pagination: UdiaWeb.PaginationHelpers.pagination(page))
end
def create(conn, journey_params) do
cur_user = Guardian.Plug.current_resource(conn)
case Logs.create_journey(cur_user, journey_params) do
{:ok, journey_versioned} ->
journey = journey_versioned
|> Map.get(:model)
|> Udia.Repo.preload(:explorer)
conn
|> put_status(:created)
|> put_resp_header("location", journey_path(conn, :show, journey))
|> render("show.json", journey: journey)
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> render(UdiaWeb.ChangesetView, "error.json", changeset: changeset)
end
end
def show(conn, %{"id" => id}) do
journey = id
|> Logs.get_journey!()
|> Udia.Repo.preload(:explorer)
render(conn, "show.json", journey: journey)
end
def update(conn, %{"id" => id, "journey" => journey_params}) do
journey = Logs.get_journey!(id)
cur_user = Guardian.Plug.current_resource(conn)
if cur_user.id != journey.explorer_id do
conn
|> put_status(:forbidden)
|> render(UdiaWeb.SessionView, "forbidden.json", error: "Invalid user")
else
case Logs.update_journey(cur_user, journey, journey_params) do
{:ok, journey_versioned} ->
journey = journey_versioned
|> Map.get(:model)
|> Udia.Repo.preload(:explorer)
conn
|> put_status(:accepted)
|> render("show.json", journey: journey)
{:error, changeset} ->
conn
|> put_status(:unprocessable_entity)
|> render(UdiaWeb.ChangesetView, "error.json", changeset: changeset)
end
end
end
def delete(conn, %{"id" => id}) do
cur_user = Guardian.Plug.current_resource(conn)
journey = Logs.get_journey!(id)
if cur_user.id != journey.explorer_id do
conn
|> put_status(:forbidden)
|> render(UdiaWeb.SessionView, "forbidden.json", error: "Invalid user")
else
Logs.delete_journey(journey)
send_resp(conn, :no_content, "")
end
end
end