diff --git a/apps/web/pages/api/twilio/webhook.ts b/apps/web/pages/api/twilio/webhook.ts index 18f909ae0b..a61a64b58c 100644 --- a/apps/web/pages/api/twilio/webhook.ts +++ b/apps/web/pages/api/twilio/webhook.ts @@ -3,7 +3,7 @@ import { z } from "zod"; import * as twilio from "@calcom/features/ee/workflows/lib/reminders/providers/twilioProvider"; import { IS_SMS_CREDITS_ENABLED, WEBAPP_URL } from "@calcom/lib/constants"; -import getOrgIdFromMemberOrTeamId from "@calcom/lib/getOrgIdFromMemberOrTeamId"; +import { getPublishedOrgIdFromMemberOrTeamId } from "@calcom/lib/getOrgIdFromMemberOrTeamId"; import { defaultHandler } from "@calcom/lib/server/defaultHandler"; import prisma from "@calcom/prisma"; @@ -120,7 +120,7 @@ async function handler(req: NextApiRequest, res: NextApiResponse) { } if (!orgId) { - orgId = await getOrgIdFromMemberOrTeamId({ + orgId = await getPublishedOrgIdFromMemberOrTeamId({ ...(!parsedTeamId ? { memberId: parsedUserId } : {}), teamId: parsedTeamId, }); diff --git a/packages/features/ee/workflows/lib/test/twilioWebhook.test.ts b/packages/features/ee/workflows/lib/test/twilioWebhook.test.ts index b02a7f91d5..b772288c78 100644 --- a/packages/features/ee/workflows/lib/test/twilioWebhook.test.ts +++ b/packages/features/ee/workflows/lib/test/twilioWebhook.test.ts @@ -34,6 +34,11 @@ vi.mock("@calcom/prisma", () => ({ }, })); +vi.mock("@calcom/lib/getOrgIdFromMemberOrTeamId", () => ({ + default: vi.fn().mockResolvedValue(null), + getPublishedOrgIdFromMemberOrTeamId: vi.fn().mockResolvedValue(null), +})); + describe("Twilio Webhook Handler", () => { beforeEach(() => { vi.clearAllMocks(); @@ -117,10 +122,6 @@ describe("Twilio Webhook Handler", () => { mockFindFirst.mockResolvedValue(null); const webhookHandler = (await import("../../../../../../apps/web/pages/api/twilio/webhook")).default; - vi.mock("@calcom/lib/getOrgIdFromMemberOrTeamId", () => ({ - default: vi.fn().mockResolvedValue(null), - })); - const mockRequest = { method: "POST", headers: { diff --git a/packages/lib/getOrgIdFromMemberOrTeamId.ts b/packages/lib/getOrgIdFromMemberOrTeamId.ts index eaf5a1d9fb..82875fc3a7 100644 --- a/packages/lib/getOrgIdFromMemberOrTeamId.ts +++ b/packages/lib/getOrgIdFromMemberOrTeamId.ts @@ -1,45 +1,70 @@ import prisma from "@calcom/prisma"; +import type { Prisma } from "@calcom/prisma/client"; + +const getOrgMemberOrTeamWhere = (memberId?: number | null, teamId?: number | null) => { + const conditions: Prisma.TeamWhereInput[] = []; + + if (memberId) { + conditions.push({ + AND: [ + { + members: { + some: { + userId: memberId, + accepted: true, + }, + }, + }, + { + isOrganization: true, + }, + ], + }); + } + + if (teamId) { + conditions.push({ + AND: [ + { + children: { + some: { + id: teamId, + }, + }, + }, + { + isOrganization: true, + }, + ], + }); + } + + return { + OR: conditions, + }; +}; export default async function getOrgIdFromMemberOrTeamId(args: { memberId?: number | null; teamId?: number | null; }) { - const userId = args.memberId ?? 0; - const teamId = args.teamId ?? 0; + const orgId = await prisma.team.findFirst({ + where: getOrgMemberOrTeamWhere(args.memberId, args.teamId), + select: { + id: true, + }, + }); + return orgId?.id; +} +export async function getPublishedOrgIdFromMemberOrTeamId(args: { + memberId?: number | null; + teamId?: number | null; +}) { const orgId = await prisma.team.findFirst({ where: { - OR: [ - { - AND: [ - { - members: { - some: { - userId, - accepted: true, - }, - }, - }, - { - isOrganization: true, - }, - ], - }, - { - AND: [ - { - children: { - some: { - id: teamId, - }, - }, - }, - { - isOrganization: true, - }, - ], - }, - ], + ...getOrgMemberOrTeamWhere(args.memberId, args.teamId), + slug: { not: null }, }, select: { id: true,