.ts
TypeScript
(application/typescript)
// 1st-party
import type { ReqHandler } from "@ethicdevs/react-monolith";
// app
import { AppRoute, AppRouteParams } from "../../routes.defs";
import { makePipelineService } from "../../services/pipelines";
import PipelineStageDetailsView, {
  PipelineStageDetailsViewProps,
} from "../../views/pipelines/PipelineStageDetailsView";

const getPipelineStageDetailsView: ReqHandler<
  AppRouteParams,
  AppRoute.REPOSITORY_PIPELINE_STAGE_DETAILS
> = async (request, reply) => {
  const { orgSlug, repoSlug, pipelineId, stageId } = request.params;

  const pipelineService = makePipelineService({ request, runner: {} });
  const pipeline = await pipelineService.getPipeline(pipelineId);
  const stages = await pipelineService.getPipelineStages(pipelineId);
  const stage = stages.find((s) => String(s.id) === String(stageId)) ?? null;
  const logs =
    stage != null
      ? await pipelineService.getPipelineStageLogs(pipelineId, String(stageId))
      : [];

  const reqHandler = reply.makeRequestHandler(request, reply);
  return reqHandler<PipelineStageDetailsViewProps>(
    PipelineStageDetailsView.name,
    {
      pipeline,
      stage,
      logs,
      orgSlug,
      repoSlug,
    },
  );
};

export default getPipelineStageDetailsView;