import type { ServiceApiContract } from "@ethicdevs/react-monolith";
import type { FastifyRequest } from "fastify";
import { Prisma, PullRequest, Repository, User } from "@prisma/client";
export interface CreatePullRequestDTO {
author: User;
summary: string;
textMd: string;
source: {
repository: Repository;
fromBranch: string;
};
target: {
repository: Repository;
destBranch: string;
};
}
export type PullRequestSelectOrIncludes =
| { select?: Prisma.PullRequestSelect }
| { includes?: Prisma.PullRequestInclude };
export interface MergePullRequestDTO {
pullRequestId: string;
mergeMessage?: string;
deleteSourceBranch?: boolean;
}
export interface MergePullRequestResult {
success: boolean;
updatedPullRequest?: PullRequest;
}
export interface PullRequestServiceAPI extends ServiceApiContract {
getPullRequestById(
pullRequestId: string,
selectOrIncludes?: PullRequestSelectOrIncludes,
): Promise<PullRequest | null>;
getPullRequestByUid<R = PullRequest | null>(
orgSlug: string,
repoSlug: string,
pullRequestUid: number,
selectOrIncludes?: PullRequestSelectOrIncludes,
): Promise<R>;
getPullRequestsInRepository(
repository: Repository,
selectOrIncludes?: PullRequestSelectOrIncludes,
): Promise<PullRequest[]>;
createPullRequest(dto: CreatePullRequestDTO): Promise<PullRequest>;
mergePullRequest(dto: MergePullRequestDTO): Promise<MergePullRequestResult>;
}
export interface PullRequestServiceDeps {
request: FastifyRequest;
}