diff --git a/packages/trpc/server/organisation-router/update-organisation.ts b/packages/trpc/server/organisation-router/update-organisation.ts index 599a82172..e32b87d63 100644 --- a/packages/trpc/server/organisation-router/update-organisation.ts +++ b/packages/trpc/server/organisation-router/update-organisation.ts @@ -3,6 +3,8 @@ import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error'; import { stripe } from '@documenso/lib/server-only/stripe'; import { buildOrganisationWhereQuery } from '@documenso/lib/utils/organisations'; import { prisma } from '@documenso/prisma'; +import { Prisma } from '@prisma/client'; +import { z } from 'zod'; import { authenticatedProcedure } from '../trpc'; import { ZUpdateOrganisationRequestSchema, ZUpdateOrganisationResponseSchema } from './update-organisation.types'; @@ -36,15 +38,33 @@ export const updateOrganisationRoute = authenticatedProcedure }); } - const updatedOrganisation = await prisma.organisation.update({ - where: { - id: organisationId, - }, - data: { - name: data.name, - url: data.url, - }, - }); + const updatedOrganisation = await prisma.organisation + .update({ + where: { + id: organisationId, + }, + data: { + name: data.name, + url: data.url, + }, + }) + .catch((err) => { + console.error(err); + + if (!(err instanceof Prisma.PrismaClientKnownRequestError)) { + throw err; + } + + const target = z.array(z.string()).safeParse(err.meta?.target); + + if (err.code === 'P2002' && target.success && target.data.includes('url')) { + throw new AppError(AppErrorCode.ALREADY_EXISTS, { + message: 'Organisation URL already exists.', + }); + } + + throw err; + }); if (updatedOrganisation.customerId) { await stripe.customers.update(updatedOrganisation.customerId, {