* feat: optimize Prisma queries by replacing findFirst with findUnique where applicable - Replace findFirst/findFirstOrThrow with findUnique/findUniqueOrThrow for queries using unique constraints - Maintain existing functionality and error handling behavior - Focus on queries using primary keys and unique index fields from schema - Revert problematic changes that caused test failures to maintain stability Co-Authored-By: benny@cal.com <benny@cal.com> * revert: exclude API files from Prisma query optimizations per user request - Reverted all 55 API-related files to their original state - Kept all non-API Prisma query optimizations intact - API files include apps/api/v1, apps/api/v2, apps/web/app/api, and packages/app-store/*/api - Non-API optimizations remain for packages/lib, packages/features, apps/web (non-api), etc. Co-Authored-By: benny@cal.com <benny@cal.com> * feat: optimize membership query in attributeUtils to use findUnique with userId_teamId constraint Co-Authored-By: benny@cal.com <benny@cal.com> * revert: exclude test files from Prisma query optimizations per user request Co-Authored-By: benny@cal.com <benny@cal.com> * revert: revert attributeUtils.ts to use findFirst for test compatibility Co-Authored-By: benny@cal.com <benny@cal.com> --------- Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com> Co-authored-by: benny@cal.com <benny@cal.com> Co-authored-by: Anik Dhabal Babu <81948346+anikdhabal@users.noreply.github.com>
73 lines
2.3 KiB
TypeScript
73 lines
2.3 KiB
TypeScript
import { zodRoutes } from "@calcom/app-store/routing-forms/zod";
|
|
import prisma from "@calcom/prisma";
|
|
import { AssignmentReasonEnum } from "@calcom/prisma/enums";
|
|
|
|
import { RoutingReasons, SalesforceRecordEnum } from "./enums";
|
|
|
|
export async function assignmentReasonHandler({
|
|
recordType,
|
|
teamMemberEmail,
|
|
routingFormResponseId,
|
|
}: {
|
|
recordType: string;
|
|
teamMemberEmail: string;
|
|
routingFormResponseId: number;
|
|
}) {
|
|
const returnObject = { reasonEnum: AssignmentReasonEnum.SALESFORCE_ASSIGNMENT };
|
|
|
|
switch (recordType) {
|
|
case SalesforceRecordEnum.CONTACT:
|
|
return { ...returnObject, assignmentReason: `Salesforce contact owner: ${teamMemberEmail}` };
|
|
case SalesforceRecordEnum.LEAD:
|
|
return { ...returnObject, assignmentReason: `Salesforce lead owner: ${teamMemberEmail}` };
|
|
case SalesforceRecordEnum.ACCOUNT:
|
|
return { ...returnObject, assignmentReason: `Salesforce account owner: ${teamMemberEmail}` };
|
|
case RoutingReasons.ACCOUNT_LOOKUP_FIELD:
|
|
const assignmentReason = await handleAccountLookupFieldReason(routingFormResponseId, teamMemberEmail);
|
|
return { ...returnObject, assignmentReason };
|
|
}
|
|
}
|
|
|
|
async function handleAccountLookupFieldReason(routingFormResponseId: number, teamMemberEmail: string) {
|
|
const routingFormResponse = await prisma.app_RoutingForms_FormResponse.findUnique({
|
|
where: {
|
|
id: routingFormResponseId,
|
|
},
|
|
select: {
|
|
chosenRouteId: true,
|
|
form: {
|
|
select: {
|
|
routes: true,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
|
|
if (!routingFormResponse) return;
|
|
|
|
const { form } = routingFormResponse;
|
|
if (!form.routes) return;
|
|
|
|
const parsedRoutes = zodRoutes.safeParse(form.routes);
|
|
|
|
if (!parsedRoutes.success || !parsedRoutes.data) return;
|
|
|
|
const chosenRouteId = routingFormResponse.chosenRouteId;
|
|
|
|
const takenRoute = parsedRoutes.data.find((route) => route.id === chosenRouteId);
|
|
|
|
if (!takenRoute || !("attributeRoutingConfig" in takenRoute)) return;
|
|
|
|
const attributeRoutingConfig = takenRoute?.attributeRoutingConfig;
|
|
|
|
if (!attributeRoutingConfig) return;
|
|
|
|
const salesforceConfig = attributeRoutingConfig["salesforce"];
|
|
|
|
const accountLookupFieldName = salesforceConfig?.rrSKipToAccountLookupFieldName;
|
|
|
|
return accountLookupFieldName
|
|
? `Salesforce account lookup field: ${accountLookupFieldName} - ${teamMemberEmail}`
|
|
: undefined;
|
|
}
|