import type { ReqHandler } from "@ethicdevs/react-monolith";
import { ResourceVisibility } from "@prisma/client";
import { AppRoute, AppRouteParams } from "../../routes.defs";
import { makeOrganizationService } from "../../services/organization";
import { makePipelineService } from "../../services/pipelines";
import { makeRepositoryService } from "../../services/repository";
import { makeUsersService } from "../../services/user";
import PipelinesView, {
PipelinesViewProps,
} from "../../views/pipelines/PipelinesView";
const getRepositoryPipelinesView: ReqHandler<
AppRouteParams,
AppRoute.REPOSITORY_PULL_REQUESTS
> = async (request, reply) => {
const { orgSlug, repoSlug } = request.params;
const orgService = makeOrganizationService({ request });
const pipelineService = makePipelineService({ request, runner: {} });
const repoService = makeRepositoryService({ request });
const usersService = makeUsersService({ request });
const currentUser =
request.session.data.authenticated &&
request.session.data.curr_user_uid != null
? await usersService.getUserById(request.session.data.curr_user_uid)
: null;
const parentOrg = await orgService.getOrganizationBySlug(orgSlug);
if (parentOrg == null) {
return reply.status(404).callNotFound();
}
const repo = await repoService.getRepository(orgSlug, repoSlug);
if (repo == null) {
return reply.status(404).callNotFound();
}
if (repo.visibility === ResourceVisibility.PRIVATE) {
if (currentUser == null) {
return reply.status(404).callNotFound();
} else if (
(await repoService.canUserAccessRepository(currentUser, repo)) === false
) {
return reply.status(404).callNotFound();
}
}
const pipelines = await pipelineService.listByRepo(
parentOrg.slug,
repo.slug,
(request.query as any)?.filter ?? "passed",
);
const reqHandler = reply.makeRequestHandler(request, reply);
return reqHandler<PipelinesViewProps>(PipelinesView.name, {
parentOrg,
pipelines,
repo,
pipelinesFilter: (request.query as any)?.filter ?? "passed",
});
};
export default getRepositoryPipelinesView;