defmodule Servicex.ControllerBase do alias AppExUtils.Json.ErrorHelper alias Ecto.Multi require Logger def transaction_flow(conn, controler_atom, module, function_atom, attr \\ [%{}]) do repo = Application.get_env(:servicex, :repo) with {:ok, result} <- Multi.new |> Multi.run(function_atom, module, function_atom, attr) |> repo.transaction() do result_map = Map.new([{controler_atom, result[function_atom]}]) conn |> Plug.Conn.put_status(:created) |> Phoenix.Controller.render("show.json", result_map) end end def update_flow(conn, controler_atom, module, function_atom, struct, attr \\ %{}) do repo = Application.get_env(:servicex, :repo) with {:ok, result} <- Multi.new |> Multi.run(function_atom, module, function_atom, [struct, attr]) |> repo.transaction() do result_map = Map.new([{controler_atom, result[function_atom]}]) conn |> Plug.Conn.put_status(:created) |> Phoenix.Controller.render("show.json", result_map) end end end