Skip to main content

lib/api/migrations/migrations.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.Migrations do
  @moduledoc """
  GitHub `migrations` API.
  """
  import Noizu.Github

  @doc """
  Cancel an import

  @see https://docs.github.com/rest/migrations/source-imports#cancel-an-import
  """
  def cancel_import(options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/import"
    body = %{}
    api_call(:delete, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  Delete a user migration archive

  @see https://docs.github.com/rest/migrations/users#delete-a-user-migration-archive
  """
  def delete_archive_for_authenticated_user(migration_id, options \\ nil) do
    url = github_base() <> "/user/migrations/#{migration_id}/archive"
    body = %{}
    api_call(:delete, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  Delete an organization migration archive

  @see https://docs.github.com/rest/migrations/orgs#delete-an-organization-migration-archive
  """
  def delete_archive_for_org(org, migration_id, options \\ nil) do
    url = github_base() <> "/orgs/#{org}/migrations/#{migration_id}/archive"
    body = %{}
    api_call(:delete, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  Download an organization migration archive

  @see https://docs.github.com/rest/migrations/orgs#download-an-organization-migration-archive
  """
  def download_archive_for_org(org, migration_id, options \\ nil) do
    url = github_base() <> "/orgs/#{org}/migrations/#{migration_id}/archive"
    body = %{}
    api_call(:get, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  Download a user migration archive

  @see https://docs.github.com/rest/migrations/users#download-a-user-migration-archive
  """
  def get_archive_for_authenticated_user(migration_id, options \\ nil) do
    url = github_base() <> "/user/migrations/#{migration_id}/archive"
    body = %{}
    api_call(:get, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  Get commit authors

  @see https://docs.github.com/rest/migrations/source-imports#get-commit-authors
  """
  def get_commit_authors(options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)

    url =
      (
        query =
          [
            get_field(:since, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/repos/#{owner}/#{repo}/import/authors" <> qs
      )

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

  @doc """
  Get an import status

  @see https://docs.github.com/rest/migrations/source-imports#get-an-import-status
  """
  def get_import_status(options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/import"
    body = %{}
    api_call(:get, url, body, Noizu.Github.Import, options)
  end

  @doc """
  Get large files

  @see https://docs.github.com/rest/migrations/source-imports#get-large-files
  """
  def get_large_files(options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/import/large_files"
    body = %{}
    api_call(:get, url, body, Noizu.Github.Collection.PorterLargeFile, options)
  end

  @doc """
  Get a user migration status

  @see https://docs.github.com/rest/migrations/users#get-a-user-migration-status
  """
  def get_status_for_authenticated_user(migration_id, options \\ nil) do
    url =
      (
        query =
          [
            get_field(:exclude, options, nil)
          ]
          |> Enum.filter(& &1)

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

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

  @doc """
  Get an organization migration status

  @see https://docs.github.com/rest/migrations/orgs#get-an-organization-migration-status
  """
  def get_status_for_org(org, migration_id, options \\ nil) do
    url =
      (
        query =
          [
            get_field(:exclude, options, nil)
          ]
          |> Enum.filter(& &1)

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

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

  @doc """
  List user migrations

  @see https://docs.github.com/rest/migrations/users#list-user-migrations
  """
  def list_for_authenticated_user(options \\ nil) do
    url =
      (
        query =
          [
            get_field(:per_page, options, nil),
            get_field(:page, options, nil)
          ]
          |> Enum.filter(& &1)

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

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

  @doc """
  List organization migrations

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

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

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

  @doc """
  List repositories for a user migration

  @see https://docs.github.com/rest/migrations/users#list-repositories-for-a-user-migration
  """
  def list_repos_for_authenticated_user(migration_id, options \\ nil) do
    url =
      (
        query =
          [
            get_field(:per_page, options, nil),
            get_field(:page, options, nil)
          ]
          |> Enum.filter(& &1)

        qs = if query == [], do: "", else: "?" <> Enum.join(query, "&")
        github_base() <> "/user/migrations/#{migration_id}/repositories" <> qs
      )

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

  @doc """
  List repositories in an organization migration

  @see https://docs.github.com/rest/migrations/orgs#list-repositories-in-an-organization-migration
  """
  def list_repos_for_org(org, migration_id, options \\ nil) do
    url =
      (
        query =
          [
            get_field(:per_page, options, nil),
            get_field(:page, options, nil)
          ]
          |> Enum.filter(& &1)

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

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

  @doc """
  Map a commit author

  @see https://docs.github.com/rest/migrations/source-imports#map-a-commit-author
  """
  def map_commit_author(author_id, body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/import/authors/#{author_id}"
    body = body
    api_call(:patch, url, body, Noizu.Github.PorterAuthor, options)
  end

  @doc """
  Update Git LFS preference

  @see https://docs.github.com/rest/migrations/source-imports#update-git-lfs-preference
  """
  def set_lfs_preference(body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/import/lfs"
    body = body
    api_call(:patch, url, body, Noizu.Github.Import, options)
  end

  @doc """
  Start a user migration

  @see https://docs.github.com/rest/migrations/users#start-a-user-migration
  """
  def start_for_authenticated_user(body, options \\ nil) do
    url = github_base() <> "/user/migrations"
    body = body
    api_call(:post, url, body, Noizu.Github.Migration, options)
  end

  @doc """
  Start an organization migration

  @see https://docs.github.com/rest/migrations/orgs#start-an-organization-migration
  """
  def start_for_org(org, body, options \\ nil) do
    url = github_base() <> "/orgs/#{org}/migrations"
    body = body
    api_call(:post, url, body, Noizu.Github.Migration, options)
  end

  @doc """
  Start an import

  @see https://docs.github.com/rest/migrations/source-imports#start-an-import
  """
  def start_import(body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/import"
    body = body
    api_call(:put, url, body, Noizu.Github.Import, options)
  end

  @doc """
  Unlock a user repository

  @see https://docs.github.com/rest/migrations/users#unlock-a-user-repository
  """
  def unlock_repo_for_authenticated_user(migration_id, repo_name, options \\ nil) do
    url = github_base() <> "/user/migrations/#{migration_id}/repos/#{repo_name}/lock"
    body = %{}
    api_call(:delete, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  Unlock an organization repository

  @see https://docs.github.com/rest/migrations/orgs#unlock-an-organization-repository
  """
  def unlock_repo_for_org(org, migration_id, repo_name, options \\ nil) do
    url = github_base() <> "/orgs/#{org}/migrations/#{migration_id}/repos/#{repo_name}/lock"
    body = %{}
    api_call(:delete, url, body, Noizu.Github.Raw, options)
  end

  @doc """
  Update an import

  @see https://docs.github.com/rest/migrations/source-imports#update-an-import
  """
  def update_import(body, options \\ nil) do
    owner = repo_owner(options)
    repo = repo_name(options)
    url = github_base() <> "/repos/#{owner}/#{repo}/import"
    body = body
    api_call(:patch, url, body, Noizu.Github.Import, options)
  end
end