Skip to main content

lib/api/projects/projects.ex

# Generated by `mix github.gen` from docs/github-api/api.github.com.json.
# Do not edit by hand; re-run the task instead.

defmodule Noizu.Github.Api.Projects do
  @moduledoc """
  GitHub `projects` API.
  """
  import Noizu.Github

  @doc """
  Add a field to an organization-owned project.

  @see https://docs.github.com/rest/projects/fields#add-a-field-to-an-organization-owned-project
  """
  def add_field_for_org(project_number, org, body, options \\ nil) do
    url = github_base() <> "/orgs/#{org}/projectsV2/#{project_number}/fields"
    body = body
    api_call(:post, url, body, Noizu.Github.ProjectsV2Field, options)
  end

  @doc """
  Add field to user owned project

  @see https://docs.github.com/rest/projects/fields#add-field-to-user-owned-project
  """
  def add_field_for_user(username, project_number, body, options \\ nil) do
    url = github_base() <> "/users/#{username}/projectsV2/#{project_number}/fields"
    body = body
    api_call(:post, url, body, Noizu.Github.ProjectsV2Field, options)
  end

  @doc """
  Add item to organization owned project

  @see https://docs.github.com/rest/projects/items#add-item-to-organization-owned-project
  """
  def add_item_for_org(org, project_number, body, options \\ nil) do
    url = github_base() <> "/orgs/#{org}/projectsV2/#{project_number}/items"
    body = body
    api_call(:post, url, body, Noizu.Github.ProjectsV2ItemSimple, options)
  end

  @doc """
  Add item to user owned project

  @see https://docs.github.com/rest/projects/items#add-item-to-user-owned-project
  """
  def add_item_for_user(username, project_number, body, options \\ nil) do
    url = github_base() <> "/users/#{username}/projectsV2/#{project_number}/items"
    body = body
    api_call(:post, url, body, Noizu.Github.ProjectsV2ItemSimple, options)
  end

  @doc """
  Create draft item for user owned project

  @see https://docs.github.com/rest/projects/drafts#create-draft-item-for-user-owned-project
  """
  def create_draft_item_for_authenticated_user(user_id, project_number, body, options \\ nil) do
    url = github_base() <> "/user/#{user_id}/projectsV2/#{project_number}/drafts"
    body = body
    api_call(:post, url, body, Noizu.Github.ProjectsV2ItemSimple, options)
  end

  @doc """
  Create draft item for organization owned project

  @see https://docs.github.com/rest/projects/drafts#create-draft-item-for-organization-owned-project
  """
  def create_draft_item_for_org(org, project_number, body, options \\ nil) do
    url = github_base() <> "/orgs/#{org}/projectsV2/#{project_number}/drafts"
    body = body
    api_call(:post, url, body, Noizu.Github.ProjectsV2ItemSimple, options)
  end

  @doc """
  Create a view for an organization-owned project

  @see https://docs.github.com/rest/projects/views#create-a-view-for-an-organization-owned-project
  """
  def create_view_for_org(org, project_number, body, options \\ nil) do
    url = github_base() <> "/orgs/#{org}/projectsV2/#{project_number}/views"
    body = body
    api_call(:post, url, body, Noizu.Github.ProjectsV2View, options)
  end

  @doc """
  Create a view for a user-owned project

  @see https://docs.github.com/rest/projects/views#create-a-view-for-a-user-owned-project
  """
  def create_view_for_user(user_id, project_number, body, options \\ nil) do
    url = github_base() <> "/users/#{user_id}/projectsV2/#{project_number}/views"
    body = body
    api_call(:post, url, body, Noizu.Github.ProjectsV2View, options)
  end

  @doc """
  Delete project item for organization

  @see https://docs.github.com/rest/projects/items#delete-project-item-for-organization
  """
  def delete_item_for_org(project_number, org, item_id, options \\ nil) do
    url = github_base() <> "/orgs/#{org}/projectsV2/#{project_number}/items/#{item_id}"
    body = %{}
    api_call(:delete, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  Delete project item for user

  @see https://docs.github.com/rest/projects/items#delete-project-item-for-user
  """
  def delete_item_for_user(project_number, username, item_id, options \\ nil) do
    url = github_base() <> "/users/#{username}/projectsV2/#{project_number}/items/#{item_id}"
    body = %{}
    api_call(:delete, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  Get project field for organization

  @see https://docs.github.com/rest/projects/fields#get-project-field-for-organization
  """
  def get_field_for_org(project_number, field_id, org, options \\ nil) do
    url = github_base() <> "/orgs/#{org}/projectsV2/#{project_number}/fields/#{field_id}"
    body = %{}
    api_call(:get, url, body, Noizu.Github.ProjectsV2Field, options)
  end

  @doc """
  Get project field for user

  @see https://docs.github.com/rest/projects/fields#get-project-field-for-user
  """
  def get_field_for_user(project_number, field_id, username, options \\ nil) do
    url = github_base() <> "/users/#{username}/projectsV2/#{project_number}/fields/#{field_id}"
    body = %{}
    api_call(:get, url, body, Noizu.Github.ProjectsV2Field, options)
  end

  @doc """
  Get project for organization

  @see https://docs.github.com/rest/projects/projects#get-project-for-organization
  """
  def get_for_org(project_number, org, options \\ nil) do
    url = github_base() <> "/orgs/#{org}/projectsV2/#{project_number}"
    body = %{}
    api_call(:get, url, body, Noizu.Github.ProjectsV2, options)
  end

  @doc """
  Get project for user

  @see https://docs.github.com/rest/projects/projects#get-project-for-user
  """
  def get_for_user(project_number, username, options \\ nil) do
    url = github_base() <> "/users/#{username}/projectsV2/#{project_number}"
    body = %{}
    api_call(:get, url, body, Noizu.Github.ProjectsV2, options)
  end

  @doc """
  Get an item for an organization owned project

  @see https://docs.github.com/rest/projects/items#get-an-item-for-an-organization-owned-project
  """
  def get_org_item(project_number, org, item_id, options \\ nil) do
    url =
      (
        query =
          [
            get_field(:fields, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/orgs/#{org}/projectsV2/#{project_number}/items/#{item_id}" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.ProjectsV2ItemWithContent, options)
  end

  @doc """
  Get an item for a user owned project

  @see https://docs.github.com/rest/projects/items#get-an-item-for-a-user-owned-project
  """
  def get_user_item(project_number, username, item_id, options \\ nil) do
    url =
      (
        query =
          [
            get_field(:fields, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/users/#{username}/projectsV2/#{project_number}/items/#{item_id}" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.ProjectsV2ItemWithContent, options)
  end

  @doc """
  List project fields for organization

  @see https://docs.github.com/rest/projects/fields#list-project-fields-for-organization
  """
  def list_fields_for_org(project_number, org, options \\ nil) do
    url =
      (
        query =
          [
            get_field(:per_page, options, nil),
            get_field(:before, options, nil),
            get_field(:after, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/orgs/#{org}/projectsV2/#{project_number}/fields" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.Collection.ProjectsV2Field, options)
  end

  @doc """
  List project fields for user

  @see https://docs.github.com/rest/projects/fields#list-project-fields-for-user
  """
  def list_fields_for_user(project_number, username, options \\ nil) do
    url =
      (
        query =
          [
            get_field(:per_page, options, nil),
            get_field(:before, options, nil),
            get_field(:after, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/users/#{username}/projectsV2/#{project_number}/fields" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.Collection.ProjectsV2Field, options)
  end

  @doc """
  List projects for organization

  @see https://docs.github.com/rest/projects/projects#list-projects-for-organization
  """
  def list_for_org(org, options \\ nil) do
    url =
      (
        query =
          [
            get_field(:q, options, nil),
            get_field(:before, options, nil),
            get_field(:after, options, nil),
            get_field(:per_page, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/orgs/#{org}/projectsV2" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.Collection.ProjectsV2, options)
  end

  @doc """
  List projects for user

  @see https://docs.github.com/rest/projects/projects#list-projects-for-user
  """
  def list_for_user(username, options \\ nil) do
    url =
      (
        query =
          [
            get_field(:q, options, nil),
            get_field(:before, options, nil),
            get_field(:after, options, nil),
            get_field(:per_page, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/users/#{username}/projectsV2" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.Collection.ProjectsV2, options)
  end

  @doc """
  List items for an organization owned project

  @see https://docs.github.com/rest/projects/items#list-items-for-an-organization-owned-project
  """
  def list_items_for_org(project_number, org, options \\ nil) do
    url =
      (
        query =
          [
            get_field(:q, options, nil),
            get_field(:fields, options, nil),
            get_field(:before, options, nil),
            get_field(:after, options, nil),
            get_field(:per_page, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/orgs/#{org}/projectsV2/#{project_number}/items" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.Collection.ProjectsV2ItemWithContent, options)
  end

  @doc """
  List items for a user owned project

  @see https://docs.github.com/rest/projects/items#list-items-for-a-user-owned-project
  """
  def list_items_for_user(project_number, username, options \\ nil) do
    url =
      (
        query =
          [
            get_field(:before, options, nil),
            get_field(:after, options, nil),
            get_field(:per_page, options, nil),
            get_field(:q, options, nil),
            get_field(:fields, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/users/#{username}/projectsV2/#{project_number}/items" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.Collection.ProjectsV2ItemWithContent, options)
  end

  @doc """
  List items for an organization project view

  @see https://docs.github.com/rest/projects/items#list-items-for-an-organization-project-view
  """
  def list_view_items_for_org(project_number, org, view_number, options \\ nil) do
    url =
      (
        query =
          [
            get_field(:fields, options, nil),
            get_field(:before, options, nil),
            get_field(:after, options, nil),
            get_field(:per_page, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")

        github_base() <>
          "/orgs/#{org}/projectsV2/#{project_number}/views/#{view_number}/items" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.Collection.ProjectsV2ItemWithContent, options)
  end

  @doc """
  List items for a user project view

  @see https://docs.github.com/rest/projects/items#list-items-for-a-user-project-view
  """
  def list_view_items_for_user(project_number, username, view_number, options \\ nil) do
    url =
      (
        query =
          [
            get_field(:fields, options, nil),
            get_field(:before, options, nil),
            get_field(:after, options, nil),
            get_field(:per_page, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")

        github_base() <>
          "/users/#{username}/projectsV2/#{project_number}/views/#{view_number}/items" <> qs
      )

    body = %{}
    api_call(:get, url, body, Noizu.Github.Collection.ProjectsV2ItemWithContent, options)
  end

  @doc """
  Update project item for organization

  @see https://docs.github.com/rest/projects/items#update-project-item-for-organization
  """
  def update_item_for_org(project_number, org, item_id, body, options \\ nil) do
    url = github_base() <> "/orgs/#{org}/projectsV2/#{project_number}/items/#{item_id}"
    body = body
    api_call(:patch, url, body, Noizu.Github.ProjectsV2ItemWithContent, options)
  end

  @doc """
  Update project item for user

  @see https://docs.github.com/rest/projects/items#update-project-item-for-user
  """
  def update_item_for_user(project_number, username, item_id, body, options \\ nil) do
    url = github_base() <> "/users/#{username}/projectsV2/#{project_number}/items/#{item_id}"
    body = body
    api_call(:patch, url, body, Noizu.Github.ProjectsV2ItemWithContent, options)
  end
end