90 lines
2.0 KiB
TypeScript
90 lines
2.0 KiB
TypeScript
import { type RuntimeEnvironment } from "@trigger.dev/database";
|
|
import { type PrismaClient, prisma } from "~/db.server";
|
|
import { type Project } from "~/models/project.server";
|
|
import { type User } from "~/models/user.server";
|
|
|
|
export class ApiKeysPresenter {
|
|
#prismaClient: PrismaClient;
|
|
|
|
constructor(prismaClient: PrismaClient = prisma) {
|
|
this.#prismaClient = prismaClient;
|
|
}
|
|
|
|
public async call({
|
|
userId,
|
|
projectSlug,
|
|
environmentSlug,
|
|
}: {
|
|
userId: User["id"];
|
|
projectSlug: Project["slug"];
|
|
environmentSlug: RuntimeEnvironment["slug"];
|
|
}) {
|
|
const environment = await this.#prismaClient.runtimeEnvironment.findFirst({
|
|
select: {
|
|
id: true,
|
|
apiKey: true,
|
|
type: true,
|
|
slug: true,
|
|
updatedAt: true,
|
|
orgMember: {
|
|
select: {
|
|
userId: true,
|
|
},
|
|
},
|
|
branchName: true,
|
|
parentEnvironment: {
|
|
select: {
|
|
id: true,
|
|
apiKey: true,
|
|
},
|
|
},
|
|
project: {
|
|
select: {
|
|
id: true,
|
|
},
|
|
},
|
|
},
|
|
where: {
|
|
project: {
|
|
slug: projectSlug,
|
|
},
|
|
organization: {
|
|
members: {
|
|
some: {
|
|
userId,
|
|
},
|
|
},
|
|
},
|
|
slug: environmentSlug,
|
|
orgMember:
|
|
environmentSlug === "dev"
|
|
? {
|
|
userId,
|
|
}
|
|
: undefined,
|
|
},
|
|
});
|
|
|
|
if (!environment) {
|
|
throw new Error("Environment not found");
|
|
}
|
|
|
|
const vercelIntegration = await this.#prismaClient.organizationProjectIntegration.findFirst({
|
|
where: {
|
|
projectId: environment.project.id,
|
|
deletedAt: null,
|
|
organizationIntegration: { service: "VERCEL", deletedAt: null },
|
|
},
|
|
select: { id: true },
|
|
});
|
|
|
|
return {
|
|
environment: {
|
|
...environment,
|
|
apiKey: environment?.parentEnvironment?.apiKey ?? environment?.apiKey,
|
|
},
|
|
hasVercelIntegration: vercelIntegration !== null,
|
|
};
|
|
}
|
|
}
|