From 39aa848e9ea72e027bb229dd6ce704e332273798 Mon Sep 17 00:00:00 2001 From: sean-brydon <55134778+sean-brydon@users.noreply.github.com> Date: Tue, 16 Apr 2024 02:14:41 +0100 Subject: [PATCH] fix: update sub-team slug - update tempOrgRedirect (#14523) --- .../routers/viewer/teams/update.handler.ts | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/packages/trpc/server/routers/viewer/teams/update.handler.ts b/packages/trpc/server/routers/viewer/teams/update.handler.ts index f7d251e424..be49a3158b 100644 --- a/packages/trpc/server/routers/viewer/teams/update.handler.ts +++ b/packages/trpc/server/routers/viewer/teams/update.handler.ts @@ -1,10 +1,12 @@ import type { Prisma } from "@prisma/client"; +import { getOrgFullOrigin } from "@calcom/ee/organizations/lib/orgDomains"; import { IS_TEAM_BILLING_ENABLED } from "@calcom/lib/constants"; import { isTeamAdmin } from "@calcom/lib/server/queries/teams"; import { uploadLogo } from "@calcom/lib/server/uploadLogo"; import { closeComUpdateTeam } from "@calcom/lib/sync/SyncServiceManager"; import { prisma } from "@calcom/prisma"; +import { RedirectType } from "@calcom/prisma/enums"; import { teamMetadataSchema } from "@calcom/prisma/zod-utils"; import { TRPCError } from "@trpc/server"; @@ -91,6 +93,40 @@ export const updateHandler = async ({ ctx, input }: UpdateOptions) => { data, }); + if (updatedTeam.parentId && prevTeam.slug) { + // No changes made lets skip this logic + if (updatedTeam.slug === prevTeam.slug) return; + + // Fetch parent team slug to construct toUrl + const parentTeam = await prisma.team.findUnique({ + where: { + id: updatedTeam.parentId, + }, + select: { + slug: true, + }, + }); + + if (!parentTeam?.slug) { + throw new Error(`Parent team wth slug: ${parentTeam?.slug} not found`); + } + + const orgUrlPrefix = getOrgFullOrigin(parentTeam.slug); + + const toUrlOld = `${orgUrlPrefix}/${prevTeam.slug}`; + const toUrlNew = `${orgUrlPrefix}/${updatedTeam.slug}`; + + await prisma.tempOrgRedirect.updateMany({ + where: { + type: RedirectType.Team, + toUrl: toUrlOld, + }, + data: { + toUrl: toUrlNew, + }, + }); + } + // Sync Services: Close.com if (prevTeam) closeComUpdateTeam(prevTeam, updatedTeam);