import type { ServiceMethodFactory } from "@ethicdevs/react-monolith";
import { PullRequest, PullRequestState, Repository } from "@prisma/client";
import type {
PullRequestSelectOrIncludes,
PullRequestServiceDeps,
} from "./types";
const getPullRequestsInRepository: ServiceMethodFactory<
PullRequestServiceDeps,
[
Repository,
PullRequestSelectOrIncludes | undefined,
"all" | "open" | "merged" | "closed" | undefined,
],
Promise<PullRequest[]>
> = ({ request }) => {
return async (repository, selectOrIncludes, filter = "open") => {
const pullRequestsInRepository = await request.prisma.pullRequest.findMany({
...(selectOrIncludes || {}),
where: {
targetRepositoryId: repository.id,
AND:
filter != null && filter !== "all"
? {
state: {
equals: {
open: PullRequestState.OPEN,
merged: PullRequestState.CLOSE_MERGED,
closed: PullRequestState.CLOSE_DENIED,
}[filter],
},
}
: undefined,
},
});
return pullRequestsInRepository;
};
};
export default getPullRequestsInRepository;