lib/groups/group.ex

defmodule MicrosoftGraph.Groups.Group do
  @moduledoc """
  https://docs.microsoft.com/en-us/graph/api/resources/groups-overview?view=graph-rest-1.0
  """
  alias MicrosoftGraph.Request

  @doc """
  List all groups.

  https://docs.microsoft.com/en-us/graph/api/group-list?view=graph-rest-1.0&tabs=http
  """
  def list_groups(client, options \\ []) do
    Request.get("/v1.0/groups", options)
    |> Request.paginate_results()
    |> Request.execute(client)
  end

  @doc """
  Get a group by its id.

  https://docs.microsoft.com/en-us/graph/api/group-get?view=graph-rest-1.0&tabs=http
  """
  def get_group(client, id, options \\ []) do
    Request.get("/v1.0/groups/#{id}", options)
    |> Request.execute(client)
  end

  @doc """
  List all members of a group. To get all members recursively, use `list_transitive_members/3`.

  https://docs.microsoft.com/en-us/graph/api/group-list-members?view=graph-rest-1.0&tabs=http
  """
  def list_members(client, id, options \\ []) do
    Request.get("/v1.0/groups/#{id}/members", options)
    |> Request.put_advanced_query_params()
    |> Request.paginate_results()
    |> Request.execute(client)
  end

  @doc """
  List all members of a group and all child groups.

  https://docs.microsoft.com/en-us/graph/api/group-list-transitivemembers?view=graph-rest-1.0&tabs=http
  """
  def list_transitive_members(client, id, options \\ []) do
    Request.get("/v1.0/groups/#{id}/transitiveMembers", options)
    |> Request.put_advanced_query_params()
    |> Request.paginate_results()
    |> Request.execute(client)
  end
end