gitfoss | ed1ed6a980644618774ddf442999d46ea7e462fb | app/controllers/pipelines/getPipelinesView.ts ∙ GitFOSS
.ts
TypeScript
(application/typescript)
// 1st-party
import type { ReqHandler } from "@ethicdevs/react-monolith";
import { ResourceVisibility } from "@prisma/client";
// app
import { AppRoute, AppRouteParams } from "../../routes.defs";
// app services
import { makeOrganizationService } from "../../services/organization";
import { makePipelineService } from "../../services/pipelines";
import { makeRepositoryService } from "../../services/repository";
import { makeUsersService } from "../../services/user";
// app views
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;