import { BaseResource } from '@gitbeaker/requester-utils'; import { RequestHelper, endpoint } from '../infrastructure'; import type { GitlabAPIResponse, PaginationRequestOptions, PaginationTypes, ShowExpanded, Sudo, } from '../infrastructure'; export type MigrationStatus = 'created' | 'started' | 'finished' | 'failed'; export interface MigrationEntityFailure { pipeline_class: string; pipeline_step: string; exception_class: string; correlation_id_value: string; created_at: string; } export interface MigrationEntitySchema extends Record { id: number; bulk_import_id: number; status: string; source_full_path: string; destination_name: string; destination_namespace: string; parent_id?: number; namespace_id: number; project_id?: string | number; created_at: string; updated_at: string; failures?: MigrationEntityFailure[]; } export interface MigrationStatusSchema extends Record { id: number; status: string; source_type: string; created_at: string; updated_at: string; } export type MigrationEntityOptions = { sourceType: string; sourceFullPath: string; destinationSlug: string; destinationNamespace: string; }; export class Migrations extends BaseResource { all( options?: { status?: MigrationStatus; } & PaginationRequestOptions

& Sudo & ShowExpanded, ): Promise> { return RequestHelper.get()(this, 'bulk_imports', options); } create( configuration: { url: string; access_token: string }, entities: MigrationEntityOptions[], options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.post()(this, 'bulk_imports', { configuration, entities, ...options, }); } allEntities({ bulkImportId, ...options }: { status?: MigrationStatus; bulkImportId?: number; } & PaginationRequestOptions<'offset'> & Sudo & ShowExpanded = {}): Promise> { const url = bulkImportId ? endpoint`bulk_imports/${bulkImportId}/entities` : 'bulk_imports/entities'; return RequestHelper.get()(this, url, options); } show( bulkImportId: number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.get()( this, `bulk_imports/${bulkImportId}`, options, ); } showEntity( bulkImportId: number, entitityId: number, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.get()( this, `bulk_imports/${bulkImportId}/entities/${entitityId}`, options, ); } }