1 changed files with 24 additions and 22 deletions
|
|
@ -25,31 +25,33 @@ defmodule MvWeb.MemberExportController do
|
|||
@custom_field_prefix Mv.Constants.custom_field_prefix()
|
||||
|
||||
def export(conn, params) do
|
||||
actor = current_actor(conn)
|
||||
if is_nil(actor), do: return_forbidden(conn)
|
||||
|
||||
case params["payload"] do
|
||||
nil ->
|
||||
conn
|
||||
|> put_status(400)
|
||||
|> put_resp_content_type("application/json")
|
||||
|> json(%{error: "payload required"})
|
||||
|
||||
payload when is_binary(payload) ->
|
||||
case Jason.decode(payload) do
|
||||
{:ok, decoded} when is_map(decoded) ->
|
||||
parsed = parse_and_validate(decoded)
|
||||
run_export(conn, actor, parsed)
|
||||
|
||||
_ ->
|
||||
conn
|
||||
|> put_status(400)
|
||||
|> put_resp_content_type("application/json")
|
||||
|> json(%{error: "invalid JSON"})
|
||||
end
|
||||
case current_actor(conn) do
|
||||
nil -> return_forbidden(conn)
|
||||
actor -> export_with_actor(conn, actor, params["payload"])
|
||||
end
|
||||
end
|
||||
|
||||
defp export_with_actor(conn, actor, payload) when is_binary(payload) do
|
||||
case Jason.decode(payload) do
|
||||
{:ok, decoded} when is_map(decoded) ->
|
||||
run_export(conn, actor, parse_and_validate(decoded))
|
||||
|
||||
_ ->
|
||||
json_error(conn, "invalid JSON")
|
||||
end
|
||||
end
|
||||
|
||||
defp export_with_actor(conn, _actor, _payload) do
|
||||
json_error(conn, "payload required")
|
||||
end
|
||||
|
||||
defp json_error(conn, message) do
|
||||
conn
|
||||
|> put_status(400)
|
||||
|> put_resp_content_type("application/json")
|
||||
|> json(%{error: message})
|
||||
end
|
||||
|
||||
defp current_actor(conn) do
|
||||
conn.assigns[:current_user]
|
||||
|> Actor.ensure_loaded()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue