lib/securex_permissions.ex

defmodule SecureX.Permissions do
  alias SecureXWeb.{PermissionController}

  @moduledoc """
  Contains CRUD For Permissions.
  """

  @doc """
  Get list of Permissions by User Roles.

  ## Examples

      iex> list(["owner", "super_admin"])
      [
      %{ permission: 4, resource_id: "users", role_id: "admin"},
      %{ permission: 4, resource_id: "person_form", role_id: "super_admin"}
     ]
  """
  @spec list(list(), number(), number()) :: tuple()
  def list(params, page, page_size \\ 10), do:
    PermissionController.list_permissions(params, page, page_size)

  @doc """
  Add a Permission. You can send either `Atom Map` or `String Map` to add a Permission.

  ## Examples

      iex> add(%{"permission" => -1, "resource_id" => "users", "role_id" => "super_admin"})
      %Permission{
        id: 1,
        permission: -1,
        resource_id: "users",
        role_id: "super_admin"
      }
  """
  @spec add(map()) :: tuple()
  def add(params) do
    case PermissionController.create(params) do
      {:error, error} -> {:error, error}
      {:ok, role} -> {:ok, role}
    end
  end

  @doc """
  Update a Permission. You can send either `Atom Map` or `String Map` to update a Permission.

   ## Examples

      iex> update(%{"id" => "1", "resource_id" => "users", "permission" => 4, "role_id" => "admin"})
      %Permission{
        id: 1,
        permission: 4,
        resource_id: "users",
        role_id: "admin"
      }

  """
  @spec update(map()) :: tuple()
  def update(params) do
    case PermissionController.update(params) do
      {:error, error} -> {:error, error}
      {:ok, role} -> {:ok, role}
    end
  end

  @doc """
  Delete a Permission.

  ## Examples

      iex> delete(%{"id" => 1)
      %Permission{
        id: 1,
        permission: 4,
        resource_id: "users",
        role_id: "admin"
      }
  """
  @spec delete(map()) :: tuple()
  def delete(params) do
    case PermissionController.delete(params) do
      {:error, error} -> {:error, error}
      {:ok, role} -> {:ok, role}
    end
  end
end