chore: create and consume JobPresenter class
This commit is contained in:
@@ -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,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
+40
@@ -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) => (
|
||||
|
||||
Reference in New Issue
Block a user