lib/operations/reactions.ex

defmodule GitHub.Reactions do
  @moduledoc """
  Provides API endpoints related to reactions
  """

  @default_client GitHub.Client

  @doc """
  Create reaction for a commit comment

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#create-reaction-for-a-commit-comment)

  """
  @spec create_for_commit_comment(String.t(), String.t(), integer, map, keyword) ::
          {:ok, GitHub.Reaction.t()} | {:error, GitHub.Error.t()}
  def create_for_commit_comment(owner, repo, comment_id, body, opts \\ []) do
    client = opts[:client] || @default_client

    client.request(%{
      args: [owner: owner, repo: repo, comment_id: comment_id, body: body],
      call: {GitHub.Reactions, :create_for_commit_comment},
      url: "/repos/#{owner}/#{repo}/comments/#{comment_id}/reactions",
      body: body,
      method: :post,
      request: [{"application/json", :map}],
      response: [
        {200, {GitHub.Reaction, :t}},
        {201, {GitHub.Reaction, :t}},
        {422, {GitHub.ValidationError, :t}}
      ],
      opts: opts
    })
  end

  @doc """
  Create reaction for an issue

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#create-reaction-for-an-issue)

  """
  @spec create_for_issue(String.t(), String.t(), integer, map, keyword) ::
          {:ok, GitHub.Reaction.t()} | {:error, GitHub.Error.t()}
  def create_for_issue(owner, repo, issue_number, body, opts \\ []) do
    client = opts[:client] || @default_client

    client.request(%{
      args: [owner: owner, repo: repo, issue_number: issue_number, body: body],
      call: {GitHub.Reactions, :create_for_issue},
      url: "/repos/#{owner}/#{repo}/issues/#{issue_number}/reactions",
      body: body,
      method: :post,
      request: [{"application/json", :map}],
      response: [
        {200, {GitHub.Reaction, :t}},
        {201, {GitHub.Reaction, :t}},
        {422, {GitHub.ValidationError, :t}}
      ],
      opts: opts
    })
  end

  @doc """
  Create reaction for an issue comment

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#create-reaction-for-an-issue-comment)

  """
  @spec create_for_issue_comment(String.t(), String.t(), integer, map, keyword) ::
          {:ok, GitHub.Reaction.t()} | {:error, GitHub.Error.t()}
  def create_for_issue_comment(owner, repo, comment_id, body, opts \\ []) do
    client = opts[:client] || @default_client

    client.request(%{
      args: [owner: owner, repo: repo, comment_id: comment_id, body: body],
      call: {GitHub.Reactions, :create_for_issue_comment},
      url: "/repos/#{owner}/#{repo}/issues/comments/#{comment_id}/reactions",
      body: body,
      method: :post,
      request: [{"application/json", :map}],
      response: [
        {200, {GitHub.Reaction, :t}},
        {201, {GitHub.Reaction, :t}},
        {422, {GitHub.ValidationError, :t}}
      ],
      opts: opts
    })
  end

  @doc """
  Create reaction for a pull request review comment

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#create-reaction-for-a-pull-request-review-comment)

  """
  @spec create_for_pull_request_review_comment(String.t(), String.t(), integer, map, keyword) ::
          {:ok, GitHub.Reaction.t()} | {:error, GitHub.Error.t()}
  def create_for_pull_request_review_comment(owner, repo, comment_id, body, opts \\ []) do
    client = opts[:client] || @default_client

    client.request(%{
      args: [owner: owner, repo: repo, comment_id: comment_id, body: body],
      call: {GitHub.Reactions, :create_for_pull_request_review_comment},
      url: "/repos/#{owner}/#{repo}/pulls/comments/#{comment_id}/reactions",
      body: body,
      method: :post,
      request: [{"application/json", :map}],
      response: [
        {200, {GitHub.Reaction, :t}},
        {201, {GitHub.Reaction, :t}},
        {422, {GitHub.ValidationError, :t}}
      ],
      opts: opts
    })
  end

  @doc """
  Create reaction for a release

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions/#create-reaction-for-a-release)

  """
  @spec create_for_release(String.t(), String.t(), integer, map, keyword) ::
          {:ok, GitHub.Reaction.t()} | {:error, GitHub.Error.t()}
  def create_for_release(owner, repo, release_id, body, opts \\ []) do
    client = opts[:client] || @default_client

    client.request(%{
      args: [owner: owner, repo: repo, release_id: release_id, body: body],
      call: {GitHub.Reactions, :create_for_release},
      url: "/repos/#{owner}/#{repo}/releases/#{release_id}/reactions",
      body: body,
      method: :post,
      request: [{"application/json", :map}],
      response: [
        {200, {GitHub.Reaction, :t}},
        {201, {GitHub.Reaction, :t}},
        {422, {GitHub.ValidationError, :t}}
      ],
      opts: opts
    })
  end

  @doc """
  Create reaction for a team discussion comment

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#create-reaction-for-a-team-discussion-comment)

  """
  @spec create_for_team_discussion_comment_in_org(
          String.t(),
          String.t(),
          integer,
          integer,
          map,
          keyword
        ) :: {:ok, GitHub.Reaction.t()} | {:error, GitHub.Error.t()}
  def create_for_team_discussion_comment_in_org(
        org,
        team_slug,
        discussion_number,
        comment_number,
        body,
        opts \\ []
      ) do
    client = opts[:client] || @default_client

    client.request(%{
      args: [
        org: org,
        team_slug: team_slug,
        discussion_number: discussion_number,
        comment_number: comment_number,
        body: body
      ],
      call: {GitHub.Reactions, :create_for_team_discussion_comment_in_org},
      url:
        "/orgs/#{org}/teams/#{team_slug}/discussions/#{discussion_number}/comments/#{comment_number}/reactions",
      body: body,
      method: :post,
      request: [{"application/json", :map}],
      response: [{200, {GitHub.Reaction, :t}}, {201, {GitHub.Reaction, :t}}],
      opts: opts
    })
  end

  @doc """
  Create reaction for a team discussion comment (Legacy)

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions/#create-reaction-for-a-team-discussion-comment-legacy)

  """
  @spec create_for_team_discussion_comment_legacy(integer, integer, integer, map, keyword) ::
          {:ok, GitHub.Reaction.t()} | {:error, GitHub.Error.t()}
  def create_for_team_discussion_comment_legacy(
        team_id,
        discussion_number,
        comment_number,
        body,
        opts \\ []
      ) do
    client = opts[:client] || @default_client

    client.request(%{
      args: [
        team_id: team_id,
        discussion_number: discussion_number,
        comment_number: comment_number,
        body: body
      ],
      call: {GitHub.Reactions, :create_for_team_discussion_comment_legacy},
      url:
        "/teams/#{team_id}/discussions/#{discussion_number}/comments/#{comment_number}/reactions",
      body: body,
      method: :post,
      request: [{"application/json", :map}],
      response: [{201, {GitHub.Reaction, :t}}],
      opts: opts
    })
  end

  @doc """
  Create reaction for a team discussion

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#create-reaction-for-a-team-discussion)

  """
  @spec create_for_team_discussion_in_org(String.t(), String.t(), integer, map, keyword) ::
          {:ok, GitHub.Reaction.t()} | {:error, GitHub.Error.t()}
  def create_for_team_discussion_in_org(org, team_slug, discussion_number, body, opts \\ []) do
    client = opts[:client] || @default_client

    client.request(%{
      args: [org: org, team_slug: team_slug, discussion_number: discussion_number, body: body],
      call: {GitHub.Reactions, :create_for_team_discussion_in_org},
      url: "/orgs/#{org}/teams/#{team_slug}/discussions/#{discussion_number}/reactions",
      body: body,
      method: :post,
      request: [{"application/json", :map}],
      response: [{200, {GitHub.Reaction, :t}}, {201, {GitHub.Reaction, :t}}],
      opts: opts
    })
  end

  @doc """
  Create reaction for a team discussion (Legacy)

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions/#create-reaction-for-a-team-discussion-legacy)

  """
  @spec create_for_team_discussion_legacy(integer, integer, map, keyword) ::
          {:ok, GitHub.Reaction.t()} | {:error, GitHub.Error.t()}
  def create_for_team_discussion_legacy(team_id, discussion_number, body, opts \\ []) do
    client = opts[:client] || @default_client

    client.request(%{
      args: [team_id: team_id, discussion_number: discussion_number, body: body],
      call: {GitHub.Reactions, :create_for_team_discussion_legacy},
      url: "/teams/#{team_id}/discussions/#{discussion_number}/reactions",
      body: body,
      method: :post,
      request: [{"application/json", :map}],
      response: [{201, {GitHub.Reaction, :t}}],
      opts: opts
    })
  end

  @doc """
  Delete a commit comment reaction

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#delete-a-commit-comment-reaction)

  """
  @spec delete_for_commit_comment(String.t(), String.t(), integer, integer, keyword) ::
          :ok | {:error, GitHub.Error.t()}
  def delete_for_commit_comment(owner, repo, comment_id, reaction_id, opts \\ []) do
    client = opts[:client] || @default_client

    client.request(%{
      args: [owner: owner, repo: repo, comment_id: comment_id, reaction_id: reaction_id],
      call: {GitHub.Reactions, :delete_for_commit_comment},
      url: "/repos/#{owner}/#{repo}/comments/#{comment_id}/reactions/#{reaction_id}",
      method: :delete,
      response: [{204, nil}],
      opts: opts
    })
  end

  @doc """
  Delete an issue reaction

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#delete-an-issue-reaction)

  """
  @spec delete_for_issue(String.t(), String.t(), integer, integer, keyword) ::
          :ok | {:error, GitHub.Error.t()}
  def delete_for_issue(owner, repo, issue_number, reaction_id, opts \\ []) do
    client = opts[:client] || @default_client

    client.request(%{
      args: [owner: owner, repo: repo, issue_number: issue_number, reaction_id: reaction_id],
      call: {GitHub.Reactions, :delete_for_issue},
      url: "/repos/#{owner}/#{repo}/issues/#{issue_number}/reactions/#{reaction_id}",
      method: :delete,
      response: [{204, nil}],
      opts: opts
    })
  end

  @doc """
  Delete an issue comment reaction

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#delete-an-issue-comment-reaction)

  """
  @spec delete_for_issue_comment(String.t(), String.t(), integer, integer, keyword) ::
          :ok | {:error, GitHub.Error.t()}
  def delete_for_issue_comment(owner, repo, comment_id, reaction_id, opts \\ []) do
    client = opts[:client] || @default_client

    client.request(%{
      args: [owner: owner, repo: repo, comment_id: comment_id, reaction_id: reaction_id],
      call: {GitHub.Reactions, :delete_for_issue_comment},
      url: "/repos/#{owner}/#{repo}/issues/comments/#{comment_id}/reactions/#{reaction_id}",
      method: :delete,
      response: [{204, nil}],
      opts: opts
    })
  end

  @doc """
  Delete a pull request comment reaction

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#delete-a-pull-request-comment-reaction)

  """
  @spec delete_for_pull_request_comment(String.t(), String.t(), integer, integer, keyword) ::
          :ok | {:error, GitHub.Error.t()}
  def delete_for_pull_request_comment(owner, repo, comment_id, reaction_id, opts \\ []) do
    client = opts[:client] || @default_client

    client.request(%{
      args: [owner: owner, repo: repo, comment_id: comment_id, reaction_id: reaction_id],
      call: {GitHub.Reactions, :delete_for_pull_request_comment},
      url: "/repos/#{owner}/#{repo}/pulls/comments/#{comment_id}/reactions/#{reaction_id}",
      method: :delete,
      response: [{204, nil}],
      opts: opts
    })
  end

  @doc """
  Delete a release reaction

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions/#delete-a-release-reaction)

  """
  @spec delete_for_release(String.t(), String.t(), integer, integer, keyword) ::
          :ok | {:error, GitHub.Error.t()}
  def delete_for_release(owner, repo, release_id, reaction_id, opts \\ []) do
    client = opts[:client] || @default_client

    client.request(%{
      args: [owner: owner, repo: repo, release_id: release_id, reaction_id: reaction_id],
      call: {GitHub.Reactions, :delete_for_release},
      url: "/repos/#{owner}/#{repo}/releases/#{release_id}/reactions/#{reaction_id}",
      method: :delete,
      response: [{204, nil}],
      opts: opts
    })
  end

  @doc """
  Delete team discussion reaction

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#delete-team-discussion-reaction)

  """
  @spec delete_for_team_discussion(String.t(), String.t(), integer, integer, keyword) ::
          :ok | {:error, GitHub.Error.t()}
  def delete_for_team_discussion(org, team_slug, discussion_number, reaction_id, opts \\ []) do
    client = opts[:client] || @default_client

    client.request(%{
      args: [
        org: org,
        team_slug: team_slug,
        discussion_number: discussion_number,
        reaction_id: reaction_id
      ],
      call: {GitHub.Reactions, :delete_for_team_discussion},
      url:
        "/orgs/#{org}/teams/#{team_slug}/discussions/#{discussion_number}/reactions/#{reaction_id}",
      method: :delete,
      response: [{204, nil}],
      opts: opts
    })
  end

  @doc """
  Delete team discussion comment reaction

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#delete-team-discussion-comment-reaction)

  """
  @spec delete_for_team_discussion_comment(
          String.t(),
          String.t(),
          integer,
          integer,
          integer,
          keyword
        ) :: :ok | {:error, GitHub.Error.t()}
  def delete_for_team_discussion_comment(
        org,
        team_slug,
        discussion_number,
        comment_number,
        reaction_id,
        opts \\ []
      ) do
    client = opts[:client] || @default_client

    client.request(%{
      args: [
        org: org,
        team_slug: team_slug,
        discussion_number: discussion_number,
        comment_number: comment_number,
        reaction_id: reaction_id
      ],
      call: {GitHub.Reactions, :delete_for_team_discussion_comment},
      url:
        "/orgs/#{org}/teams/#{team_slug}/discussions/#{discussion_number}/comments/#{comment_number}/reactions/#{reaction_id}",
      method: :delete,
      response: [{204, nil}],
      opts: opts
    })
  end

  @doc """
  List reactions for a commit comment

  ## Options

    * `content` (String.t()): Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a commit comment.
    * `per_page` (integer): The number of results per page (max 100).
    * `page` (integer): Page number of the results to fetch.

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#list-reactions-for-a-commit-comment)

  """
  @spec list_for_commit_comment(String.t(), String.t(), integer, keyword) ::
          {:ok, [GitHub.Reaction.t()]} | {:error, GitHub.Error.t()}
  def list_for_commit_comment(owner, repo, comment_id, opts \\ []) do
    client = opts[:client] || @default_client
    query = Keyword.take(opts, [:content, :page, :per_page])

    client.request(%{
      args: [owner: owner, repo: repo, comment_id: comment_id],
      call: {GitHub.Reactions, :list_for_commit_comment},
      url: "/repos/#{owner}/#{repo}/comments/#{comment_id}/reactions",
      method: :get,
      query: query,
      response: [{200, {:array, {GitHub.Reaction, :t}}}, {404, {GitHub.BasicError, :t}}],
      opts: opts
    })
  end

  @doc """
  List reactions for an issue

  ## Options

    * `content` (String.t()): Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to an issue.
    * `per_page` (integer): The number of results per page (max 100).
    * `page` (integer): Page number of the results to fetch.

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#list-reactions-for-an-issue)

  """
  @spec list_for_issue(String.t(), String.t(), integer, keyword) ::
          {:ok, [GitHub.Reaction.t()]} | {:error, GitHub.Error.t()}
  def list_for_issue(owner, repo, issue_number, opts \\ []) do
    client = opts[:client] || @default_client
    query = Keyword.take(opts, [:content, :page, :per_page])

    client.request(%{
      args: [owner: owner, repo: repo, issue_number: issue_number],
      call: {GitHub.Reactions, :list_for_issue},
      url: "/repos/#{owner}/#{repo}/issues/#{issue_number}/reactions",
      method: :get,
      query: query,
      response: [
        {200, {:array, {GitHub.Reaction, :t}}},
        {404, {GitHub.BasicError, :t}},
        {410, {GitHub.BasicError, :t}}
      ],
      opts: opts
    })
  end

  @doc """
  List reactions for an issue comment

  ## Options

    * `content` (String.t()): Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to an issue comment.
    * `per_page` (integer): The number of results per page (max 100).
    * `page` (integer): Page number of the results to fetch.

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#list-reactions-for-an-issue-comment)

  """
  @spec list_for_issue_comment(String.t(), String.t(), integer, keyword) ::
          {:ok, [GitHub.Reaction.t()]} | {:error, GitHub.Error.t()}
  def list_for_issue_comment(owner, repo, comment_id, opts \\ []) do
    client = opts[:client] || @default_client
    query = Keyword.take(opts, [:content, :page, :per_page])

    client.request(%{
      args: [owner: owner, repo: repo, comment_id: comment_id],
      call: {GitHub.Reactions, :list_for_issue_comment},
      url: "/repos/#{owner}/#{repo}/issues/comments/#{comment_id}/reactions",
      method: :get,
      query: query,
      response: [{200, {:array, {GitHub.Reaction, :t}}}, {404, {GitHub.BasicError, :t}}],
      opts: opts
    })
  end

  @doc """
  List reactions for a pull request review comment

  ## Options

    * `content` (String.t()): Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a pull request review comment.
    * `per_page` (integer): The number of results per page (max 100).
    * `page` (integer): Page number of the results to fetch.

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#list-reactions-for-a-pull-request-review-comment)

  """
  @spec list_for_pull_request_review_comment(String.t(), String.t(), integer, keyword) ::
          {:ok, [GitHub.Reaction.t()]} | {:error, GitHub.Error.t()}
  def list_for_pull_request_review_comment(owner, repo, comment_id, opts \\ []) do
    client = opts[:client] || @default_client
    query = Keyword.take(opts, [:content, :page, :per_page])

    client.request(%{
      args: [owner: owner, repo: repo, comment_id: comment_id],
      call: {GitHub.Reactions, :list_for_pull_request_review_comment},
      url: "/repos/#{owner}/#{repo}/pulls/comments/#{comment_id}/reactions",
      method: :get,
      query: query,
      response: [{200, {:array, {GitHub.Reaction, :t}}}, {404, {GitHub.BasicError, :t}}],
      opts: opts
    })
  end

  @doc """
  List reactions for a release

  ## Options

    * `content` (String.t()): Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a release.
    * `per_page` (integer): The number of results per page (max 100).
    * `page` (integer): Page number of the results to fetch.

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions/#list-reactions-for-a-release)

  """
  @spec list_for_release(String.t(), String.t(), integer, keyword) ::
          {:ok, [GitHub.Reaction.t()]} | {:error, GitHub.Error.t()}
  def list_for_release(owner, repo, release_id, opts \\ []) do
    client = opts[:client] || @default_client
    query = Keyword.take(opts, [:content, :page, :per_page])

    client.request(%{
      args: [owner: owner, repo: repo, release_id: release_id],
      call: {GitHub.Reactions, :list_for_release},
      url: "/repos/#{owner}/#{repo}/releases/#{release_id}/reactions",
      method: :get,
      query: query,
      response: [{200, {:array, {GitHub.Reaction, :t}}}, {404, {GitHub.BasicError, :t}}],
      opts: opts
    })
  end

  @doc """
  List reactions for a team discussion comment

  ## Options

    * `content` (String.t()): Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion comment.
    * `per_page` (integer): The number of results per page (max 100).
    * `page` (integer): Page number of the results to fetch.

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#list-reactions-for-a-team-discussion-comment)

  """
  @spec list_for_team_discussion_comment_in_org(String.t(), String.t(), integer, integer, keyword) ::
          {:ok, [GitHub.Reaction.t()]} | {:error, GitHub.Error.t()}
  def list_for_team_discussion_comment_in_org(
        org,
        team_slug,
        discussion_number,
        comment_number,
        opts \\ []
      ) do
    client = opts[:client] || @default_client
    query = Keyword.take(opts, [:content, :page, :per_page])

    client.request(%{
      args: [
        org: org,
        team_slug: team_slug,
        discussion_number: discussion_number,
        comment_number: comment_number
      ],
      call: {GitHub.Reactions, :list_for_team_discussion_comment_in_org},
      url:
        "/orgs/#{org}/teams/#{team_slug}/discussions/#{discussion_number}/comments/#{comment_number}/reactions",
      method: :get,
      query: query,
      response: [{200, {:array, {GitHub.Reaction, :t}}}],
      opts: opts
    })
  end

  @doc """
  List reactions for a team discussion comment (Legacy)

  ## Options

    * `content` (String.t()): Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion comment.
    * `per_page` (integer): The number of results per page (max 100).
    * `page` (integer): Page number of the results to fetch.

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions/#list-reactions-for-a-team-discussion-comment-legacy)

  """
  @spec list_for_team_discussion_comment_legacy(integer, integer, integer, keyword) ::
          {:ok, [GitHub.Reaction.t()]} | {:error, GitHub.Error.t()}
  def list_for_team_discussion_comment_legacy(
        team_id,
        discussion_number,
        comment_number,
        opts \\ []
      ) do
    client = opts[:client] || @default_client
    query = Keyword.take(opts, [:content, :page, :per_page])

    client.request(%{
      args: [
        team_id: team_id,
        discussion_number: discussion_number,
        comment_number: comment_number
      ],
      call: {GitHub.Reactions, :list_for_team_discussion_comment_legacy},
      url:
        "/teams/#{team_id}/discussions/#{discussion_number}/comments/#{comment_number}/reactions",
      method: :get,
      query: query,
      response: [{200, {:array, {GitHub.Reaction, :t}}}],
      opts: opts
    })
  end

  @doc """
  List reactions for a team discussion

  ## Options

    * `content` (String.t()): Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion.
    * `per_page` (integer): The number of results per page (max 100).
    * `page` (integer): Page number of the results to fetch.

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions#list-reactions-for-a-team-discussion)

  """
  @spec list_for_team_discussion_in_org(String.t(), String.t(), integer, keyword) ::
          {:ok, [GitHub.Reaction.t()]} | {:error, GitHub.Error.t()}
  def list_for_team_discussion_in_org(org, team_slug, discussion_number, opts \\ []) do
    client = opts[:client] || @default_client
    query = Keyword.take(opts, [:content, :page, :per_page])

    client.request(%{
      args: [org: org, team_slug: team_slug, discussion_number: discussion_number],
      call: {GitHub.Reactions, :list_for_team_discussion_in_org},
      url: "/orgs/#{org}/teams/#{team_slug}/discussions/#{discussion_number}/reactions",
      method: :get,
      query: query,
      response: [{200, {:array, {GitHub.Reaction, :t}}}],
      opts: opts
    })
  end

  @doc """
  List reactions for a team discussion (Legacy)

  ## Options

    * `content` (String.t()): Returns a single [reaction type](https://docs.github.com/rest/reference/reactions#reaction-types). Omit this parameter to list all reactions to a team discussion.
    * `per_page` (integer): The number of results per page (max 100).
    * `page` (integer): Page number of the results to fetch.

  ## Resources

    * [API method documentation](https://docs.github.com/rest/reference/reactions/#list-reactions-for-a-team-discussion-legacy)

  """
  @spec list_for_team_discussion_legacy(integer, integer, keyword) ::
          {:ok, [GitHub.Reaction.t()]} | {:error, GitHub.Error.t()}
  def list_for_team_discussion_legacy(team_id, discussion_number, opts \\ []) do
    client = opts[:client] || @default_client
    query = Keyword.take(opts, [:content, :page, :per_page])

    client.request(%{
      args: [team_id: team_id, discussion_number: discussion_number],
      call: {GitHub.Reactions, :list_for_team_discussion_legacy},
      url: "/teams/#{team_id}/discussions/#{discussion_number}/reactions",
      method: :get,
      query: query,
      response: [{200, {:array, {GitHub.Reaction, :t}}}],
      opts: opts
    })
  end
end