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>
This commit is contained in:
authored and GitHub committed 2025-06-17 09:52:02 +03:00
1 parent a6b98bd35d
commit 4920abdaf7
93 files changed
+205 -172

No files matched your search

@@ -134,7 +134,7 @@ const getEventTypes = async (userId: number, teamIds?: number[]) => {
.sort((eventTypeA, eventTypeB) => eventTypeB.position - eventTypeA.position),
}));
} else {
const user = await prisma.user.findFirst({
const user = await prisma.user.findUnique({
where: {
id: userId,
},
+1 -1
View File
@@ -157,7 +157,7 @@ export const handleSeatsEventTypeOnBooking = async (
} | null;
let seatAttendee: seatAttendee = null;
if (seatReferenceUid) {
seatAttendee = await prisma.bookingSeat.findFirst({
seatAttendee = await prisma.bookingSeat.findUnique({
where: {
referenceUid: seatReferenceUid,
},
+5 -3
View File
@@ -65,10 +65,12 @@ export async function moveUserToOrg({
);
}
const userWithSameUsernameInOrg = await prisma.user.findFirst({
const userWithSameUsernameInOrg = await prisma.user.findUnique({
where: {
username: targetOrgUsername,
organizationId: targetOrgId,
username_organizationId: {
username: targetOrgUsername,
organizationId: targetOrgId,
},
},
});
@@ -602,7 +602,7 @@ async function addWebhooks(webhooks: InputWebhook[]) {
async function addWorkflowsToDb(workflows: InputWorkflow[]) {
await Promise.all(
workflows.map(async (workflow) => {
const team = await prismock.team.findFirst({
const team = await prismock.team.findUnique({
where: {
id: workflow.teamId ?? 0,
},