a804a29516
* chore: Stripe paid apps flow * chore: Subscription * chore: Webhooks * chore: Abstract functions * chore: Lockfile * chore: Webhook handler * chore: Use catch-all * chore: Webhook changes, etc * chore: Cleanup * chore: Use actual price id * chore: Updates * chore: Install normally until expiry date * Disable team install for paid apps and cal.ai\ * Fix the same at another place * Fix Typescript error * redactedCause doesnt have message has enumerable prop * Fix reinstallation of an already installed app * chore: Remove unused deps * chore: Ensure index * chore: Price in usd * chore: PR suggestion * Fix missing packages in yarn.lock --------- Co-authored-by: Hariom <hariombalhara@gmail.com> Co-authored-by: Peer Richelsen <peeroke@gmail.com>
55 lines
1.2 KiB
TypeScript
55 lines
1.2 KiB
TypeScript
import type { Prisma } from "@prisma/client";
|
|
|
|
import { HttpError } from "@calcom/lib/http-error";
|
|
import prisma from "@calcom/prisma";
|
|
|
|
export async function checkInstalled(slug: string, userId: number) {
|
|
const alreadyInstalled = await prisma.credential.findFirst({
|
|
where: {
|
|
appId: slug,
|
|
userId: userId,
|
|
},
|
|
});
|
|
if (alreadyInstalled) {
|
|
throw new HttpError({ statusCode: 422, message: "Already installed" });
|
|
}
|
|
}
|
|
|
|
type InstallationArgs = {
|
|
appType: string;
|
|
userId: number;
|
|
slug: string;
|
|
key?: Prisma.InputJsonValue;
|
|
teamId?: number;
|
|
subscriptionId?: string | null;
|
|
paymentStatus?: string | null;
|
|
billingCycleStart?: number | null;
|
|
};
|
|
|
|
export async function createDefaultInstallation({
|
|
appType,
|
|
userId,
|
|
slug,
|
|
key = {},
|
|
teamId,
|
|
billingCycleStart,
|
|
paymentStatus,
|
|
subscriptionId,
|
|
}: InstallationArgs) {
|
|
const installation = await prisma.credential.create({
|
|
data: {
|
|
type: appType,
|
|
key,
|
|
...(teamId ? { teamId } : { userId }),
|
|
appId: slug,
|
|
subscriptionId,
|
|
paymentStatus,
|
|
billingCycleStart,
|
|
},
|
|
});
|
|
if (!installation) {
|
|
throw new Error(`Unable to create user credential for type ${appType}`);
|
|
}
|
|
return installation;
|
|
}
|