Added check on create eventtype to see is user has slug that already exists (#2757)

* Added check on create eventtype to see is user has slug that already exists, added error check on onError

* revert yarn.lock back

* Catches prisma known error instead of making an additional query

Co-authored-by: zomars <zomars@me.com>
This commit is contained in:
Mitchell Mooreandzomars authored and GitHub committed 2022-05-15 03:41:39 +00:00
1 parent 2a53614723
commit 016023fa50
2 files changed
+17 -4

No files matched your search

@@ -104,6 +104,11 @@ export default function CreateEventTypeButton(props: Props) {
showToast(message, "error");
}
if (err.data?.code === "BAD_REQUEST") {
const message = `${err.data.code}: URL already exists.`;
showToast(message, "error");
}
if (err.data?.code === "UNAUTHORIZED") {
const message = `${err.data.code}: You are not able to create this event`;
showToast(message, "error");
+12 -4
View File
@@ -1,11 +1,11 @@
import { EventTypeCustomInput, MembershipRole, PeriodType, Prisma } from "@prisma/client";
import { PrismaClientKnownRequestError } from "@prisma/client/runtime";
import { z } from "zod";
import getAppKeysFromSlug from "@calcom/app-store/_utils/getAppKeysFromSlug";
import { _DestinationCalendarModel, _EventTypeCustomInputModel, _EventTypeModel } from "@calcom/prisma/zod";
import { stringOrNumber } from "@calcom/prisma/zod-utils";
import { createEventTypeInput } from "@calcom/prisma/zod/custom/eventtype";
import { RecurringEvent } from "@calcom/types/Calendar";
import { createProtectedRouter } from "@server/createRouter";
import { viewerRouter } from "@server/routers/viewer";
@@ -150,9 +150,17 @@ export const eventTypesRouter = createProtectedRouter()
data.schedulingType = schedulingType;
}
const eventType = await ctx.prisma.eventType.create({ data });
return { eventType };
try {
const eventType = await ctx.prisma.eventType.create({ data });
return { eventType };
} catch (e) {
if (e instanceof PrismaClientKnownRequestError) {
if (e.code === "P2002" && Array.isArray(e.meta?.target) && e.meta?.target.includes("slug")) {
throw new TRPCError({ code: "BAD_REQUEST", message: "URL Slug already exists for given user." });
}
}
throw e;
}
},
})
// Prevent non-owners to update/delete a team event