defmodule StepFlow.JobController do
use StepFlow, :controller
alias StepFlow.Controller.Helpers
alias StepFlow.Jobs
alias StepFlow.Repo
alias StepFlow.Workflows
action_fallback(ExBackendWeb.FallbackController)
def index(%Plug.Conn{assigns: %{current_user: user}} = conn, params) do
jobs =
params
|> Map.put("roles", user.roles)
|> Jobs.list_jobs()
conn
|> put_view(StepFlow.JobView)
|> render("index.json", jobs: jobs)
end
def index(conn, _) do
conn
|> put_status(:forbidden)
|> put_view(StepFlow.JobView)
|> render("error.json",
errors: %{reason: "Forbidden to view jobs."}
)
end
def show(%Plug.Conn{assigns: %{current_user: user}} = conn, %{"id" => id}) do
job =
Jobs.get_job!(id)
|> Repo.preload([:status])
workflow = Workflows.get_workflow_for_job!(id)
if Helpers.has_right?("workflow::" <> workflow.identifier, user, "view") do
conn
|> put_view(StepFlow.JobView)
|> render("show.json", job: job)
else
conn
|> put_status(:forbidden)
|> put_view(StepFlow.JobView)
|> render("error.json",
errors: %{reason: "Forbidden to view this job."}
)
end
end
def show(conn, _) do
conn
|> put_status(:forbidden)
|> put_view(StepFlow.WorkflowDefinitionView)
|> render("error.json",
errors: %{reason: "Forbidden to show workflow with this identifier"}
)
end
end