import type { ServiceMethodFactory } from "@ethicdevs/react-monolith";
import {
Artefact,
Pipeline,
PipelineStatus,
Repository,
Stage,
User,
} from "@prisma/client";
import type { PipelineServiceDeps, PipelinesFilter } from "./types";
const makeListByRepo: ServiceMethodFactory<
PipelineServiceDeps,
[string, string],
Promise<
(Pipeline & {
stages: Stage[];
triggeredByUser: Omit<User, "hashedPassword" | "email"> | null;
artefacts: Artefact[];
repo: Repository;
})[]
>
> = ({ request }) => {
return async (
orgSlug: string,
repoSlug: string,
filter?: PipelinesFilter,
) => {
return request.prisma.pipeline.findMany({
where: {
repo: {
organization: {
slug: orgSlug,
},
slug: repoSlug,
},
status:
filter != null && filter !== "all"
? {
passed: PipelineStatus.PASSED,
pending: PipelineStatus.PENDING,
running: PipelineStatus.RUNNING,
failed: PipelineStatus.FAILED,
canceled: PipelineStatus.CANCELED,
}[filter || "passed"]
: undefined,
},
orderBy: { createdAt: "desc" },
include: {
stages: true,
triggeredByUser: {
select: {
id: true,
username: true,
avatarUri: true,
createdAt: true,
updatedAt: true,
displayName: true,
role: true,
},
},
artefacts: true,
repo: true,
},
});
};
};
export default makeListByRepo;