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; } }