Files
calendar/packages/trpc/server/routers/apps/routing-forms/getIncompleteBookingSettings.handler.ts
T
Benny JooandGitHub 92eb41c117 refactor: Migrate trpc routers in App store package to Trpc package (#23536)
* migrate trpc routers in app package to trpc package

* delete

* delete

* delete

* fix

* fix

* fix

* format

* format

* fix

* fix

* fix

* fix

* remove unused file

* fix

* fix

* wip
2025-09-07 22:17:33 -03:00

107 lines
2.6 KiB
TypeScript

import { enabledIncompleteBookingApps } from "@calcom/app-store/routing-forms/lib/enabledIncompleteBookingApps";
import type { PrismaClient } from "@calcom/prisma";
import { safeCredentialSelect } from "@calcom/prisma/selects/credential";
import type { TrpcSessionUser } from "@calcom/trpc/server/types";
import { TRPCError } from "@trpc/server";
import type { TGetIncompleteBookingSettingsInputSchema } from "./getIncompleteBookingSettings.schema";
interface GetIncompleteBookingSettingsOptions {
ctx: {
prisma: PrismaClient;
user: NonNullable<TrpcSessionUser>;
};
input: TGetIncompleteBookingSettingsInputSchema;
}
const getInCompleteBookingSettingsHandler = async (options: GetIncompleteBookingSettingsOptions) => {
const {
ctx: { prisma },
input,
} = options;
const { user: _, ...safeCredentialSelectWithoutUser } = safeCredentialSelect;
const [incompleteBookingActions, form] = await Promise.all([
prisma.app_RoutingForms_IncompleteBookingActions.findMany({
where: {
formId: input.formId,
},
}),
prisma.app_RoutingForms_Form.findUnique({
where: {
id: input.formId,
},
select: {
userId: true,
teamId: true,
},
}),
]);
if (!form) {
throw new TRPCError({
code: "NOT_FOUND",
message: "Form not found",
});
}
const teamId = form?.teamId;
const userId = form.userId;
if (teamId) {
// Need to get the credentials for the team and org
const orgQuery = await prisma.team.findUnique({
where: {
id: teamId,
},
select: {
parentId: true,
},
});
const credentials = await prisma.credential.findMany({
where: {
appId: {
in: enabledIncompleteBookingApps,
},
teamId: {
in: [teamId, ...(orgQuery?.parentId ? [orgQuery.parentId] : [])],
},
},
select: {
...safeCredentialSelectWithoutUser,
user: {
select: {
email: true,
name: true,
},
},
team: {
select: {
name: true,
},
},
},
});
return { incompleteBookingActions, credentials };
}
if (userId) {
// Assume that a user will have one credential per app
const credential = await prisma.credential.findFirst({
where: {
appId: {
in: enabledIncompleteBookingApps,
},
userId,
},
});
return { incompleteBookingActions, credentials: credential ? [{ ...credential, team: null }] : [] };
}
};
export default getInCompleteBookingSettingsHandler;