chore: create and consume JobPresenter class

This commit is contained in:
kaf-lamed-beyt
2023-07-14 16:40:06 +01:00
parent bb11001fb7
commit 229207c8f8
2 changed files with 62 additions and 0 deletions
@@ -0,0 +1,22 @@
import { PrismaClient, prisma } from "~/db.server";
import { Job } from "~/models/job.server";
export class JobsListPresenter {
#prismaClient: PrismaClient;
constructor(prismaClient: PrismaClient = prisma) {
this.#prismaClient = prismaClient;
}
public async getProjectJob(
projectSlug: string,
jobId: string
): Promise<Job | null> {
return this.#prismaClient.job.findFirst({
where: {
projectId: projectSlug,
id: jobId,
},
});
}
}
@@ -27,6 +27,46 @@ import {
trimTrailingSlash,
} from "~/utils/pathBuilder";
import { BreadcrumbLink } from "~/components/navigation/NavBar";
import { requireUserId } from "~/services/session.server";
import { LoaderArgs } from "@remix-run/server-runtime";
import invariant from "tiny-invariant";
import { typedjson } from "remix-typedjson";
import { analytics } from "~/services/analytics.server";
import { JobsListPresenter } from "~/presenters/JobPresenter.server";
export const loader = async ({ request, params }: LoaderArgs) => {
const { projectParam, jobId } = params;
const userId = await requireUserId(request);
invariant(projectParam, "projectParam not found");
invariant(jobId, "jobId not found");
try {
const jobsListPresenter = new JobsListPresenter();
const jobs = await jobsListPresenter.getProjectJob(projectParam, jobId);
if (!jobs) {
throw new Response("Not found", {
status: 404,
statusText: `Project with this ${projectParam} was not found in your Organization`,
});
}
return typedjson({
jobs,
});
} catch (error) {
if (error instanceof Response) {
throw error;
}
console.error(error);
throw new Response(undefined, {
status: 400,
statusText:
"Something went wrong. If the problem persists contact support",
});
}
};
export const handle: Handle = {
breadcrumb: (match) => (