defmodule GitHub.Copilot do @moduledoc """ Provides API endpoints related to copilot """ @default_client GitHub.Client @doc """ Add teams to the Copilot for Business subscription for an organization ## Resources * [API method documentation](https://docs.github.com/rest/copilot/copilot-for-business#add-teams-to-the-copilot-for-business-subscription-for-an-organization) """ @spec add_copilot_for_business_seats_for_teams(String.t(), map, keyword) :: {:ok, map} | {:error, GitHub.Error.t()} def add_copilot_for_business_seats_for_teams(org, body, opts \\ []) do client = opts[:client] || @default_client client.request(%{ args: [org: org, body: body], call: {GitHub.Copilot, :add_copilot_for_business_seats_for_teams}, url: "/orgs/#{org}/copilot/billing/selected_teams", body: body, method: :post, request: [{"application/json", :map}], response: [ {201, :map}, {401, {GitHub.BasicError, :t}}, {403, {GitHub.BasicError, :t}}, {404, {GitHub.BasicError, :t}}, {422, nil}, {500, {GitHub.BasicError, :t}} ], opts: opts }) end @doc """ Add users to the Copilot for Business subscription for an organization ## Resources * [API method documentation](https://docs.github.com/rest/copilot/copilot-for-business#add-users-to-the-copilot-for-business-subscription-for-an-organization) """ @spec add_copilot_for_business_seats_for_users(String.t(), map, keyword) :: {:ok, map} | {:error, GitHub.Error.t()} def add_copilot_for_business_seats_for_users(org, body, opts \\ []) do client = opts[:client] || @default_client client.request(%{ args: [org: org, body: body], call: {GitHub.Copilot, :add_copilot_for_business_seats_for_users}, url: "/orgs/#{org}/copilot/billing/selected_users", body: body, method: :post, request: [{"application/json", :map}], response: [ {201, :map}, {401, {GitHub.BasicError, :t}}, {403, {GitHub.BasicError, :t}}, {404, {GitHub.BasicError, :t}}, {422, nil}, {500, {GitHub.BasicError, :t}} ], opts: opts }) end @doc """ Remove teams from the Copilot for Business subscription for an organization ## Resources * [API method documentation](https://docs.github.com/rest/copilot/copilot-for-business#remove-teams-from-the-copilot-for-business-subscription-for-an-organization) """ @spec cancel_copilot_seat_assignment_for_teams(String.t(), map, keyword) :: {:ok, map} | {:error, GitHub.Error.t()} def cancel_copilot_seat_assignment_for_teams(org, body, opts \\ []) do client = opts[:client] || @default_client client.request(%{ args: [org: org, body: body], call: {GitHub.Copilot, :cancel_copilot_seat_assignment_for_teams}, url: "/orgs/#{org}/copilot/billing/selected_teams", body: body, method: :delete, request: [{"application/json", :map}], response: [ {200, :map}, {401, {GitHub.BasicError, :t}}, {403, {GitHub.BasicError, :t}}, {404, {GitHub.BasicError, :t}}, {422, nil}, {500, {GitHub.BasicError, :t}} ], opts: opts }) end @doc """ Remove users from the Copilot for Business subscription for an organization ## Resources * [API method documentation](https://docs.github.com/rest/copilot/copilot-for-business#remove-users-from-the-copilot-for-business-subscription-for-an-organization) """ @spec cancel_copilot_seat_assignment_for_users(String.t(), map, keyword) :: {:ok, map} | {:error, GitHub.Error.t()} def cancel_copilot_seat_assignment_for_users(org, body, opts \\ []) do client = opts[:client] || @default_client client.request(%{ args: [org: org, body: body], call: {GitHub.Copilot, :cancel_copilot_seat_assignment_for_users}, url: "/orgs/#{org}/copilot/billing/selected_users", body: body, method: :delete, request: [{"application/json", :map}], response: [ {200, :map}, {401, {GitHub.BasicError, :t}}, {403, {GitHub.BasicError, :t}}, {404, {GitHub.BasicError, :t}}, {422, nil}, {500, {GitHub.BasicError, :t}} ], opts: opts }) end @doc """ Get Copilot for Business seat information and settings for an organization ## Resources * [API method documentation](https://docs.github.com/rest/copilot/copilot-for-business#get-copilot-for-business-seat-information-and-settings-for-an-organization) """ @spec get_copilot_organization_details(String.t(), keyword) :: {:ok, GitHub.Copilot.OrganizationDetails.t()} | {:error, GitHub.Error.t()} def get_copilot_organization_details(org, opts \\ []) do client = opts[:client] || @default_client client.request(%{ args: [org: org], call: {GitHub.Copilot, :get_copilot_organization_details}, url: "/orgs/#{org}/copilot/billing", method: :get, response: [ {200, {GitHub.Copilot.OrganizationDetails, :t}}, {401, {GitHub.BasicError, :t}}, {403, {GitHub.BasicError, :t}}, {404, {GitHub.BasicError, :t}}, {500, {GitHub.BasicError, :t}} ], opts: opts }) end @doc """ Get Copilot for Business seat assignment details for a user ## Resources * [API method documentation](https://docs.github.com/rest/copilot/copilot-for-business#get-copilot-for-business-seat-assignment-details-for-a-user) """ @spec get_copilot_seat_assignment_details_for_user(String.t(), String.t(), keyword) :: {:ok, GitHub.Copilot.SeatDetails.t()} | {:error, GitHub.Error.t()} def get_copilot_seat_assignment_details_for_user(org, username, opts \\ []) do client = opts[:client] || @default_client client.request(%{ args: [org: org, username: username], call: {GitHub.Copilot, :get_copilot_seat_assignment_details_for_user}, url: "/orgs/#{org}/members/#{username}/copilot", method: :get, response: [ {200, {GitHub.Copilot.SeatDetails, :t}}, {401, {GitHub.BasicError, :t}}, {403, {GitHub.BasicError, :t}}, {404, {GitHub.BasicError, :t}}, {422, nil}, {500, {GitHub.BasicError, :t}} ], opts: opts }) end @doc """ List all Copilot for Business seat assignments for an organization ## Options * `page` (integer): Page number of the results to fetch. * `per_page` (integer): The number of results per page (max 100). ## Resources * [API method documentation](https://docs.github.com/rest/copilot/copilot-for-business#list-all-copilot-for-business-seat-assignments-for-an-organization) """ @spec list_copilot_seats(String.t(), keyword) :: {:ok, map} | {:error, GitHub.Error.t()} def list_copilot_seats(org, opts \\ []) do client = opts[:client] || @default_client query = Keyword.take(opts, [:page, :per_page]) client.request(%{ args: [org: org], call: {GitHub.Copilot, :list_copilot_seats}, url: "/orgs/#{org}/copilot/billing/seats", method: :get, query: query, response: [ {200, :map}, {401, {GitHub.BasicError, :t}}, {403, {GitHub.BasicError, :t}}, {404, {GitHub.BasicError, :t}}, {500, {GitHub.BasicError, :t}} ], opts: opts }) end end