defmodule GitHub.Projects do
@moduledoc """
Provides API endpoints related to projects
"""
@default_client GitHub.Client
@doc """
Add project collaborator
Adds a collaborator to an organization project and sets their permission level. You must be an organization owner or a project `admin` to add a collaborator.
## Resources
* [API method documentation](https://docs.github.com/rest/projects/collaborators#add-project-collaborator)
"""
@spec add_collaborator(integer, String.t(), map | nil, keyword) ::
:ok | {:error, GitHub.Error.t()}
def add_collaborator(project_id, username, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id, username: username, body: body],
call: {GitHub.Projects, :add_collaborator},
url: "/projects/#{project_id}/collaborators/#{username}",
body: body,
method: :put,
request: [{"application/json", {:union, [:map, :null]}}],
response: [
{204, :null},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :t}}
],
opts: opts
})
end
@type create_card_503_json_resp :: %{
__info__: map,
code: String.t() | nil,
documentation_url: String.t() | nil,
errors: [GitHub.ProjectsErrors.create_card_503_json_resp()] | nil,
message: String.t() | nil
}
@doc """
Create a project card
## Resources
* [API method documentation](https://docs.github.com/rest/projects/cards#create-a-project-card)
"""
@spec create_card(integer, map, keyword) ::
{:ok, GitHub.Project.Card.t()} | {:error, GitHub.Error.t()}
def create_card(column_id, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [column_id: column_id, body: body],
call: {GitHub.Projects, :create_card},
url: "/projects/columns/#{column_id}/cards",
body: body,
method: :post,
request: [{"application/json", :map}],
response: [
{201, {GitHub.Project.Card, :t}},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{422, {:union, [{GitHub.ValidationError, :simple}, {GitHub.ValidationError, :t}]}},
{503, {GitHub.Projects, :create_card_503_json_resp}}
],
opts: opts
})
end
@doc """
Create a project column
Creates a new project column.
## Resources
* [API method documentation](https://docs.github.com/rest/projects/columns#create-a-project-column)
"""
@spec create_column(integer, map, keyword) ::
{:ok, GitHub.Project.Column.t()} | {:error, GitHub.Error.t()}
def create_column(project_id, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id, body: body],
call: {GitHub.Projects, :create_column},
url: "/projects/#{project_id}/columns",
body: body,
method: :post,
request: [{"application/json", :map}],
response: [
{201, {GitHub.Project.Column, :t}},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :simple}}
],
opts: opts
})
end
@doc """
Create a user project
Creates a user project board. Returns a `410 Gone` status if the user does not have existing classic projects. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned.
## Resources
* [API method documentation](https://docs.github.com/rest/projects/projects#create-a-user-project)
"""
@spec create_for_authenticated_user(map, keyword) ::
{:ok, GitHub.Project.t()} | {:error, GitHub.Error.t()}
def create_for_authenticated_user(body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [body: body],
call: {GitHub.Projects, :create_for_authenticated_user},
url: "/user/projects",
body: body,
method: :post,
request: [{"application/json", :map}],
response: [
{201, {GitHub.Project, :t}},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :simple}}
],
opts: opts
})
end
@doc """
Create an organization project
Creates an organization project board. Returns a `410 Gone` status if projects are disabled in the organization or if the organization does not have existing classic projects. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned.
## Resources
* [API method documentation](https://docs.github.com/rest/projects/projects#create-an-organization-project)
"""
@spec create_for_org(String.t(), map, keyword) ::
{:ok, GitHub.Project.t()} | {:error, GitHub.Error.t()}
def create_for_org(org, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [org: org, body: body],
call: {GitHub.Projects, :create_for_org},
url: "/orgs/#{org}/projects",
body: body,
method: :post,
request: [{"application/json", :map}],
response: [
{201, {GitHub.Project, :t}},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}},
{410, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :simple}}
],
opts: opts
})
end
@doc """
Create a repository project
Creates a repository project board. Returns a `410 Gone` status if projects are disabled in the repository or if the repository does not have existing classic projects. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned.
## Resources
* [API method documentation](https://docs.github.com/rest/projects/projects#create-a-repository-project)
"""
@spec create_for_repo(String.t(), String.t(), map, keyword) ::
{:ok, GitHub.Project.t()} | {:error, GitHub.Error.t()}
def create_for_repo(owner, repo, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [owner: owner, repo: repo, body: body],
call: {GitHub.Projects, :create_for_repo},
url: "/repos/#{owner}/#{repo}/projects",
body: body,
method: :post,
request: [{"application/json", :map}],
response: [
{201, {GitHub.Project, :t}},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}},
{410, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :simple}}
],
opts: opts
})
end
@type delete_403_json_resp :: %{
__info__: map,
documentation_url: String.t() | nil,
errors: [String.t()] | nil,
message: String.t() | nil
}
@doc """
Delete a project
Deletes a project board. Returns a `404 Not Found` status if projects are disabled.
## Resources
* [API method documentation](https://docs.github.com/rest/projects/projects#delete-a-project)
"""
@spec delete(integer, keyword) :: :ok | {:error, GitHub.Error.t()}
def delete(project_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id],
call: {GitHub.Projects, :delete},
url: "/projects/#{project_id}",
method: :delete,
response: [
{204, :null},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.Projects, :delete_403_json_resp}},
{404, {GitHub.BasicError, :t}},
{410, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@type delete_card_403_json_resp :: %{
__info__: map,
documentation_url: String.t() | nil,
errors: [String.t()] | nil,
message: String.t() | nil
}
@doc """
Delete a project card
Deletes a project card
## Resources
* [API method documentation](https://docs.github.com/rest/projects/cards#delete-a-project-card)
"""
@spec delete_card(integer, keyword) :: :ok | {:error, GitHub.Error.t()}
def delete_card(card_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [card_id: card_id],
call: {GitHub.Projects, :delete_card},
url: "/projects/columns/cards/#{card_id}",
method: :delete,
response: [
{204, :null},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.Projects, :delete_card_403_json_resp}},
{404, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
Delete a project column
Deletes a project column.
## Resources
* [API method documentation](https://docs.github.com/rest/projects/columns#delete-a-project-column)
"""
@spec delete_column(integer, keyword) :: :ok | {:error, GitHub.Error.t()}
def delete_column(column_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [column_id: column_id],
call: {GitHub.Projects, :delete_column},
url: "/projects/columns/#{column_id}",
method: :delete,
response: [
{204, :null},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
Get a project
Gets a project by its `id`. Returns a `404 Not Found` status if projects are disabled. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned.
## Resources
* [API method documentation](https://docs.github.com/rest/projects/projects#get-a-project)
"""
@spec get(integer, keyword) :: {:ok, GitHub.Project.t()} | {:error, GitHub.Error.t()}
def get(project_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id],
call: {GitHub.Projects, :get},
url: "/projects/#{project_id}",
method: :get,
response: [
{200, {GitHub.Project, :t}},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
Get a project card
Gets information about a project card.
## Resources
* [API method documentation](https://docs.github.com/rest/projects/cards#get-a-project-card)
"""
@spec get_card(integer, keyword) :: {:ok, GitHub.Project.Card.t()} | {:error, GitHub.Error.t()}
def get_card(card_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [card_id: card_id],
call: {GitHub.Projects, :get_card},
url: "/projects/columns/cards/#{card_id}",
method: :get,
response: [
{200, {GitHub.Project.Card, :t}},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
Get a project column
Gets information about a project column.
## Resources
* [API method documentation](https://docs.github.com/rest/projects/columns#get-a-project-column)
"""
@spec get_column(integer, keyword) ::
{:ok, GitHub.Project.Column.t()} | {:error, GitHub.Error.t()}
def get_column(column_id, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [column_id: column_id],
call: {GitHub.Projects, :get_column},
url: "/projects/columns/#{column_id}",
method: :get,
response: [
{200, {GitHub.Project.Column, :t}},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
Get project permission for a user
Returns the collaborator's permission level for an organization project. Possible values for the `permission` key: `admin`, `write`, `read`, `none`. You must be an organization owner or a project `admin` to review a user's permission level.
## Resources
* [API method documentation](https://docs.github.com/rest/projects/collaborators#get-project-permission-for-a-user)
"""
@spec get_permission_for_user(integer, String.t(), keyword) ::
{:ok, GitHub.Project.CollaboratorPermission.t()} | {:error, GitHub.Error.t()}
def get_permission_for_user(project_id, username, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id, username: username],
call: {GitHub.Projects, :get_permission_for_user},
url: "/projects/#{project_id}/collaborators/#{username}/permission",
method: :get,
response: [
{200, {GitHub.Project.CollaboratorPermission, :t}},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :t}}
],
opts: opts
})
end
@doc """
List project cards
Lists the project cards in a project.
## Options
* `archived_state`: Filters the project cards that are returned by the card's state.
* `per_page`: The number of results per page (max 100). For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)."
* `page`: The page number of the results to fetch. For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)."
## Resources
* [API method documentation](https://docs.github.com/rest/projects/cards#list-project-cards)
"""
@spec list_cards(integer, keyword) ::
{:ok, [GitHub.Project.Card.t()]} | {:error, GitHub.Error.t()}
def list_cards(column_id, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:archived_state, :page, :per_page])
client.request(%{
args: [column_id: column_id],
call: {GitHub.Projects, :list_cards},
url: "/projects/columns/#{column_id}/cards",
method: :get,
query: query,
response: [
{200, [{GitHub.Project.Card, :t}]},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
List project collaborators
Lists the collaborators for an organization project. For a project, the list of collaborators includes outside collaborators, organization members that are direct collaborators, organization members with access through team memberships, organization members with access through default organization permissions, and organization owners. You must be an organization owner or a project `admin` to list collaborators.
## Options
* `affiliation`: Filters the collaborators by their affiliation. `outside` means outside collaborators of a project that are not a member of the project's organization. `direct` means collaborators with permissions to a project, regardless of organization membership status. `all` means all collaborators the authenticated user can see.
* `per_page`: The number of results per page (max 100). For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)."
* `page`: The page number of the results to fetch. For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)."
## Resources
* [API method documentation](https://docs.github.com/rest/projects/collaborators#list-project-collaborators)
"""
@spec list_collaborators(integer, keyword) ::
{:ok, [GitHub.User.simple()]} | {:error, GitHub.Error.t()}
def list_collaborators(project_id, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:affiliation, :page, :per_page])
client.request(%{
args: [project_id: project_id],
call: {GitHub.Projects, :list_collaborators},
url: "/projects/#{project_id}/collaborators",
method: :get,
query: query,
response: [
{200, [{GitHub.User, :simple}]},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :t}}
],
opts: opts
})
end
@doc """
List project columns
Lists the project columns in a project.
## Options
* `per_page`: The number of results per page (max 100). For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)."
* `page`: The page number of the results to fetch. For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)."
## Resources
* [API method documentation](https://docs.github.com/rest/projects/columns#list-project-columns)
"""
@spec list_columns(integer, keyword) ::
{:ok, [GitHub.Project.Column.t()]} | {:error, GitHub.Error.t()}
def list_columns(project_id, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:page, :per_page])
client.request(%{
args: [project_id: project_id],
call: {GitHub.Projects, :list_columns},
url: "/projects/#{project_id}/columns",
method: :get,
query: query,
response: [
{200, [{GitHub.Project.Column, :t}]},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc """
List organization projects
Lists the projects in an organization. Returns a `404 Not Found` status if projects are disabled in the organization. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned.
## Options
* `state`: Indicates the state of the projects to return.
* `per_page`: The number of results per page (max 100). For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)."
* `page`: The page number of the results to fetch. For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)."
## Resources
* [API method documentation](https://docs.github.com/rest/projects/projects#list-organization-projects)
"""
@spec list_for_org(String.t(), keyword) ::
{:ok, [GitHub.Project.t()]} | {:error, GitHub.Error.t()}
def list_for_org(org, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:page, :per_page, :state])
client.request(%{
args: [org: org],
call: {GitHub.Projects, :list_for_org},
url: "/orgs/#{org}/projects",
method: :get,
query: query,
response: [{200, [{GitHub.Project, :t}]}, {422, {GitHub.ValidationError, :simple}}],
opts: opts
})
end
@doc """
List repository projects
Lists the projects in a repository. Returns a `404 Not Found` status if projects are disabled in the repository. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned.
## Options
* `state`: Indicates the state of the projects to return.
* `per_page`: The number of results per page (max 100). For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)."
* `page`: The page number of the results to fetch. For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)."
## Resources
* [API method documentation](https://docs.github.com/rest/projects/projects#list-repository-projects)
"""
@spec list_for_repo(String.t(), String.t(), keyword) ::
{:ok, [GitHub.Project.t()]} | {:error, GitHub.Error.t()}
def list_for_repo(owner, repo, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:page, :per_page, :state])
client.request(%{
args: [owner: owner, repo: repo],
call: {GitHub.Projects, :list_for_repo},
url: "/repos/#{owner}/#{repo}/projects",
method: :get,
query: query,
response: [
{200, [{GitHub.Project, :t}]},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}},
{410, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :simple}}
],
opts: opts
})
end
@doc """
List user projects
Lists projects for a user.
## Options
* `state`: Indicates the state of the projects to return.
* `per_page`: The number of results per page (max 100). For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)."
* `page`: The page number of the results to fetch. For more information, see "[Using pagination in the REST API](https://docs.github.com/rest/using-the-rest-api/using-pagination-in-the-rest-api)."
## Resources
* [API method documentation](https://docs.github.com/rest/projects/projects#list-user-projects)
"""
@spec list_for_user(String.t(), keyword) ::
{:ok, [GitHub.Project.t()]} | {:error, GitHub.Error.t()}
def list_for_user(username, opts \\ []) do
client = opts[:client] || @default_client
query = Keyword.take(opts, [:page, :per_page, :state])
client.request(%{
args: [username: username],
call: {GitHub.Projects, :list_for_user},
url: "/users/#{username}/projects",
method: :get,
query: query,
response: [{200, [{GitHub.Project, :t}]}, {422, {GitHub.ValidationError, :t}}],
opts: opts
})
end
@type move_card_201_json_resp :: %{__info__: map}
@type move_card_403_json_resp :: %{
__info__: map,
documentation_url: String.t() | nil,
errors: [GitHub.ProjectsErrors.move_card_403_json_resp()] | nil,
message: String.t() | nil
}
@type move_card_503_json_resp :: %{
__info__: map,
code: String.t() | nil,
documentation_url: String.t() | nil,
errors: [GitHub.ProjectsErrors.move_card_503_json_resp()] | nil,
message: String.t() | nil
}
@doc """
Move a project card
## Resources
* [API method documentation](https://docs.github.com/rest/projects/cards#move-a-project-card)
"""
@spec move_card(integer, map, keyword) :: {:ok, map} | {:error, GitHub.Error.t()}
def move_card(card_id, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [card_id: card_id, body: body],
call: {GitHub.Projects, :move_card},
url: "/projects/columns/cards/#{card_id}/moves",
body: body,
method: :post,
request: [{"application/json", :map}],
response: [
{201, {GitHub.Projects, :move_card_201_json_resp}},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.Projects, :move_card_403_json_resp}},
{422, {GitHub.ValidationError, :t}},
{503, {GitHub.Projects, :move_card_503_json_resp}}
],
opts: opts
})
end
@type move_column_201_json_resp :: %{__info__: map}
@doc """
Move a project column
## Resources
* [API method documentation](https://docs.github.com/rest/projects/columns#move-a-project-column)
"""
@spec move_column(integer, map, keyword) :: {:ok, map} | {:error, GitHub.Error.t()}
def move_column(column_id, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [column_id: column_id, body: body],
call: {GitHub.Projects, :move_column},
url: "/projects/columns/#{column_id}/moves",
body: body,
method: :post,
request: [{"application/json", :map}],
response: [
{201, {GitHub.Projects, :move_column_201_json_resp}},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :simple}}
],
opts: opts
})
end
@doc """
Remove user as a collaborator
Removes a collaborator from an organization project. You must be an organization owner or a project `admin` to remove a collaborator.
## Resources
* [API method documentation](https://docs.github.com/rest/projects/collaborators#remove-user-as-a-collaborator)
"""
@spec remove_collaborator(integer, String.t(), keyword) :: :ok | {:error, GitHub.Error.t()}
def remove_collaborator(project_id, username, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id, username: username],
call: {GitHub.Projects, :remove_collaborator},
url: "/projects/#{project_id}/collaborators/#{username}",
method: :delete,
response: [
{204, :null},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :t}}
],
opts: opts
})
end
@type update_403_json_resp :: %{
__info__: map,
documentation_url: String.t() | nil,
errors: [String.t()] | nil,
message: String.t() | nil
}
@doc """
Update a project
Updates a project board's information. Returns a `404 Not Found` status if projects are disabled. If you do not have sufficient privileges to perform this action, a `401 Unauthorized` or `410 Gone` status is returned.
## Resources
* [API method documentation](https://docs.github.com/rest/projects/projects#update-a-project)
"""
@spec update(integer, map, keyword) :: {:ok, GitHub.Project.t()} | {:error, GitHub.Error.t()}
def update(project_id, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [project_id: project_id, body: body],
call: {GitHub.Projects, :update},
url: "/projects/#{project_id}",
body: body,
method: :patch,
request: [{"application/json", :map}],
response: [
{200, {GitHub.Project, :t}},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.Projects, :update_403_json_resp}},
{404, :null},
{410, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :simple}}
],
opts: opts
})
end
@doc """
Update an existing project card
## Resources
* [API method documentation](https://docs.github.com/rest/projects/cards#update-an-existing-project-card)
"""
@spec update_card(integer, map, keyword) ::
{:ok, GitHub.Project.Card.t()} | {:error, GitHub.Error.t()}
def update_card(card_id, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [card_id: card_id, body: body],
call: {GitHub.Projects, :update_card},
url: "/projects/columns/cards/#{card_id}",
body: body,
method: :patch,
request: [{"application/json", :map}],
response: [
{200, {GitHub.Project.Card, :t}},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}},
{404, {GitHub.BasicError, :t}},
{422, {GitHub.ValidationError, :simple}}
],
opts: opts
})
end
@doc """
Update an existing project column
## Resources
* [API method documentation](https://docs.github.com/rest/projects/columns#update-an-existing-project-column)
"""
@spec update_column(integer, map, keyword) ::
{:ok, GitHub.Project.Column.t()} | {:error, GitHub.Error.t()}
def update_column(column_id, body, opts \\ []) do
client = opts[:client] || @default_client
client.request(%{
args: [column_id: column_id, body: body],
call: {GitHub.Projects, :update_column},
url: "/projects/columns/#{column_id}",
body: body,
method: :patch,
request: [{"application/json", :map}],
response: [
{200, {GitHub.Project.Column, :t}},
{304, :null},
{401, {GitHub.BasicError, :t}},
{403, {GitHub.BasicError, :t}}
],
opts: opts
})
end
@doc false
@spec __fields__(atom) :: keyword
def __fields__(:create_card_503_json_resp) do
[
code: {:string, :generic},
documentation_url: {:string, :generic},
errors: [{GitHub.ProjectsErrors, :create_card_503_json_resp}],
message: {:string, :generic}
]
end
def __fields__(:delete_403_json_resp) do
[
documentation_url: {:string, :generic},
errors: [string: :generic],
message: {:string, :generic}
]
end
def __fields__(:delete_card_403_json_resp) do
[
documentation_url: {:string, :generic},
errors: [string: :generic],
message: {:string, :generic}
]
end
def __fields__(:move_card_201_json_resp) do
[]
end
def __fields__(:move_card_403_json_resp) do
[
documentation_url: {:string, :generic},
errors: [{GitHub.ProjectsErrors, :move_card_403_json_resp}],
message: {:string, :generic}
]
end
def __fields__(:move_card_503_json_resp) do
[
code: {:string, :generic},
documentation_url: {:string, :generic},
errors: [{GitHub.ProjectsErrors, :move_card_503_json_resp}],
message: {:string, :generic}
]
end
def __fields__(:move_column_201_json_resp) do
[]
end
def __fields__(:update_403_json_resp) do
[
documentation_url: {:string, :generic},
errors: [string: :generic],
message: {:string, :generic}
]
end
end