import type { BaseResourceOptions } from '@gitbeaker/requester-utils'; import { ResourceDiscussions } from '../templates'; import type { DiscussionNotePositionOptions, DiscussionNotePositionSchema, DiscussionNoteSchema, DiscussionSchema, } from '../templates/ResourceDiscussions'; import { RequestHelper, endpoint } from '../infrastructure'; import type { GitlabAPIResponse, OneOf, PaginationRequestOptions, PaginationTypes, ShowExpanded, Sudo, } from '../infrastructure'; export interface MergeRequestDiscussionNoteSchema extends DiscussionNoteSchema { resolved_by: string; resolved_at: string; position?: DiscussionNotePositionSchema; } export type MergeRequestDiscussionNotePositionOptions = DiscussionNotePositionOptions & { lineRange?: { start?: { lineCode: string; type: 'new' | 'old'; }; end?: { lineCode: string; type: 'new' | 'old'; }; }; }; export interface MergeRequestDiscussions extends ResourceDiscussions { addNote( projectId: string | number, mergerequestId: string | number, discussionId: string, noteId: number, body: string, options?: { createdAt?: string } & Sudo & ShowExpanded, ): Promise>; all( projectId: string | number, mergerequestId: string | number, options?: PaginationRequestOptions

& Sudo & ShowExpanded, ): Promise>; create( projectId: string | number, mergerequestId: string | number, body: string, options?: { position?: DiscussionNotePositionOptions; commitId?: string; createdAt?: string; } & Sudo & ShowExpanded, ): Promise>; editNote( projectId: string | number, mergerequestId: string | number, discussionId: string, noteId: number, options: Sudo & ShowExpanded & OneOf<{ body: string; resolved: boolean }>, ): Promise>; removeNote( projectId: string | number, mergerequestId: string | number, discussionId: string, noteId: number, options?: Sudo & ShowExpanded, ): Promise>; resolve( projectId: string | number, mergerequestId: string | number, discussionId: string, resolve: boolean, options?: Sudo & ShowExpanded, ): Promise>; show( projectId: string | number, mergerequestId: string | number, discussionId: string, options?: Sudo & ShowExpanded, ): Promise>; } export class MergeRequestDiscussions extends ResourceDiscussions { constructor(options: BaseResourceOptions) { /* istanbul ignore next */ super('projects', 'merge_requests', options); } resolve( projectId: string | number, mergerequestId: string | number, discussionId: string, resolved: boolean, options?: Sudo & ShowExpanded, ): Promise> { return RequestHelper.put()( this, endpoint`${projectId}/merge_requests/${mergerequestId}/discussions/${discussionId}`, { searchParams: { resolved }, ...options, }, ); } }