Files
calendar/packages/app-store/salesforce/lib/assignmentReasonHandler.ts
T
devin-ai-integration[bot]GitHubbenny@cal.com <benny@cal.com>benny@cal.com <benny@cal.com>benny@cal.com <benny@cal.com>benny@cal.com <benny@cal.com>Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>benny@cal.com <benny@cal.com>Anik Dhabal Babu
4920abdaf7 feat: optimize Prisma queries by replacing findFirst with findUnique where applicable (#21826)
* 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>
2025-06-17 09:52:02 +03:00

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