Files
triggerdotdev--trigger.dev/apps/webapp/app/presenters/v3/TaskPresenter.server.ts
T
2026-07-13 13:32:57 +08:00

84 lines
1.8 KiB
TypeScript

import type { BackgroundWorkerTask } from "@trigger.dev/database";
import type { PrismaClient } from "~/db.server";
import { prisma } from "~/db.server";
import type { Project } from "~/models/project.server";
import type { User } from "~/models/user.server";
export class TaskPresenter {
#prismaClient: PrismaClient;
constructor(prismaClient: PrismaClient = prisma) {
this.#prismaClient = prismaClient;
}
public async call({
userId,
taskFriendlyId,
projectSlug,
}: {
userId: User["id"];
taskFriendlyId: BackgroundWorkerTask["friendlyId"];
projectSlug: Project["slug"];
}) {
const task = await this.#prismaClient.backgroundWorkerTask.findFirst({
select: {
id: true,
slug: true,
filePath: true,
friendlyId: true,
createdAt: true,
worker: {
select: {
id: true,
version: true,
sdkVersion: true,
cliVersion: true,
createdAt: true,
updatedAt: true,
friendlyId: true,
},
},
runtimeEnvironment: {
select: {
id: true,
slug: true,
type: true,
orgMember: {
select: {
user: {
select: {
id: true,
name: true,
displayName: true,
},
},
},
},
},
},
},
where: {
friendlyId: taskFriendlyId,
runtimeEnvironment: {
organization: {
members: {
some: {
userId,
},
},
},
},
project: {
slug: projectSlug,
},
},
});
if (!task) {
return undefined;
}
return task;
}
}