some extra modifyings I did
check_request_fields:
def call(%Plug.Conn{request_path: path} = conn, opts) do
{:ok, body_as_json, conn} = Plug.Conn.read_body(conn, opts)
if path in opts[:paths] do
verify_tuple = verify_request_fields!(body_as_json, opts[:fields], MyApp.Validate.CustomRules.get_rules(conn.request_path)) ##cuidado com essa linha ao começar muitos roteamentos
conn = case verify_tuple do
{:ok, body} ->
conn
|> Conn.assign(:status, 200)
|> Conn.assign(:resp, verify_tuple)
|> Conn.assign(:resp_body_as_json, body_as_json)
{:error, error_body_as_json} ->
conn
|> Conn.assign(:status, 400)
|> Conn.assign(:resp, verify_tuple)
|> Conn.assign(:resp_body_as_json, error_body_as_json)
end
conn
else
conn = Conn.assign(conn, :resp, {:error, %{"msg" => "algo deu errado em call check request fields"}})
conn
end
end
router file:
defmodule TestesPay.MyRouter do
use Plug.Router
alias MyApp.PlugServer.Plugs.CheckRequestFields
plug CheckRequestFields, fields: ["chain", "coin", "coin", "transaction_value", "transaction_charged", "ref", "ref_fee", "payload"], paths: ["/api/create_contract"]
plug :match
plug :dispatch
post "/api/create_contract" do
with {:ok, response} <- conn.assigns.resp,
{:ok, changeset} = MyApp.ControllerCreateContract.create(response)
do
IO.inspect(conn)
conn
|> put_resp_content_type("application/json")
|> send_resp(conn.assigns.status, conn.assigns.resp_body_as_json)
else
{:error, json_response} ->
conn
|> put_resp_content_type("application/json")
|> send_resp(conn.assigns.status, json_response)
end
end
match _ do
send_resp(conn, 404, "oops")
end
end






















