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