defmodule SecureX.Res do alias SecureXWeb.{ResourceController} @moduledoc """ Contains CRUD For Resources. """ @doc """ Get list of Resources. `list/1` get records without pagination `list/2` & `list/3` returns records with pagination ## Examples iex> list(1, 2) {:ok, %Scrivener.Page{ entries: [ %Resource{ id: "person_farm", name: "Persons Farm" }, %Resource{ id: "users", name: "Users" }, ], page_number: 1, page_size: 2, total_entries: 22, total_pages: 3 } } iex> list() {:ok, [ %Resource{ id: "person_farm", name: "Persons Farm" }, %Resource{ id: "users", name: "Users" } ] } """ @spec list(number(), number()) :: tuple() def list(page \\ nil, page_size \\ 10), do: ResourceController.list_resources(page, page_size) @doc """ Get a Resource. ## Examples iex> get(%{"res" => "person_farm"}) %Resource{ id: "person_farm", name: "Persons Farm" } """ @spec get(map()) :: tuple() def get(params) do case ResourceController.get(params) do {:error, error} -> {:error, error} {:ok, res} -> {:ok, res} end end @doc """ Add a Resource. You can send either `Atom Map` or `String Map` to add a Resource. ## Examples iex> add(%{"res" => "Person Farm"}) %Resource{ id: "person_farm", name: "Persons Farm" } """ @spec add(map()) :: tuple() def add(params) do case ResourceController.create(params) do {:error, error} -> {:error, error} {:ok, role} -> {:ok, role} end end @doc """ Update a Resource. You can update any resource along with its permissions. You can send either `Atom Map` or `String Map` to update a Role. It will automatically update `resource_id` in `Permissions` table. ## Examples iex> update(%{"id" => "person_farm", "res" => "Person Organization"}) %Resource{ id: "person_organization", name: "Person Organization", permissions: :successfully_updated_permissions } """ @spec update(map()) :: tuple() def update(params) do case ResourceController.update(params) do {:error, error} -> {:error, error} {:ok, role} -> {:ok, role} end end @doc """ Delete a Resource. All `Permissions` will be removed against this resource. ## Examples iex> delete(%{"id" => "person_organization") %Resource{ id: "person_organization", name: "Person Organization", permissions: :successfully_removed_permissions } """ @spec delete(map()) :: tuple() def delete(params) do case ResourceController.delete(params) do {:error, error} -> {:error, error} {:ok, role} -> {:ok, role} end end end