.ts
TypeScript
(application/typescript)
// 1st-party
import type { ServiceMethodFactory } from "@ethicdevs/react-monolith";
// auto-generated via script [prisma:generate]
import type {
  Artefact,
  Pipeline,
  Repository,
  Stage,
  User,
} from "@prisma/client";
// app
import type { PipelineServiceDeps } from "./types";

const makeGetPipeline: ServiceMethodFactory<
  PipelineServiceDeps,
  [string],
  Promise<
    | (Pipeline & {
        stages: Stage[];
        triggeredByUser: Omit<User, "hashedPassword" | "email"> | null;
        artefacts: Artefact[];
        repo: Repository;
      })
    | null
  >
> = ({ request }) => {
  return async (pipelineId: string) => {
    return request.prisma.pipeline.findUnique({
      where: {
        id: pipelineId,
      },
      include: {
        stages: true,
        triggeredByUser: {
          select: {
            id: true,
            username: true,
            createdAt: true,
            updatedAt: true,
            avatarUri: true,
            displayName: true,
            role: true,
          },
        },
        artefacts: true,
        repo: true,
      },
    });
  };
};

export default makeGetPipeline;