feat: return cal link in event-types query (#244)

Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
This commit is contained in:
Nafees Nazik
2023-03-17 13:57:18 +05:30
committed by GitHub
co-authored by Hariom Balhara
parent cb54ab670e
commit 945ab355a5
4 changed files with 53 additions and 7 deletions
+1
View File
@@ -130,5 +130,6 @@ export const schemaEventTypeReadPublic = EventType.pick({
.nullable(),
metadata: jsonSchema.nullable(),
customInputs: customInputSchema.array().optional(),
link: z.string().optional(),
})
);
+15 -2
View File
@@ -5,6 +5,8 @@ import { defaultResponder } from "@calcom/lib/server";
import { schemaEventTypeReadPublic } from "~/lib/validations/event-type";
import { schemaQueryIdParseInt } from "~/lib/validations/shared/queryIdTransformParseInt";
import getCalLink from "../_utils/getCalLink";
/**
* @swagger
* /event-types/{id}:
@@ -40,8 +42,19 @@ import { schemaQueryIdParseInt } from "~/lib/validations/shared/queryIdTransform
export async function getHandler(req: NextApiRequest) {
const { prisma, query } = req;
const { id } = schemaQueryIdParseInt.parse(query);
const event_type = await prisma.eventType.findUnique({ where: { id }, include: { customInputs: true } });
return { event_type: schemaEventTypeReadPublic.parse(event_type) };
const event_type = await prisma.eventType.findUnique({
where: { id },
include: {
customInputs: true,
team: { select: { slug: true } },
users: true,
owner: { select: { username: true, id: true } },
},
});
const link = event_type ? getCalLink(event_type) : null;
return { event_type: schemaEventTypeReadPublic.parse({ ...event_type, link }) };
}
export default defaultResponder(getHandler);
+21 -5
View File
@@ -7,6 +7,8 @@ import { defaultResponder } from "@calcom/lib/server";
import { schemaEventTypeReadPublic } from "~/lib/validations/event-type";
import { schemaQuerySingleOrMultipleUserIds } from "~/lib/validations/shared/queryUserId";
import getCalLink from "./_utils/getCalLink";
/**
* @swagger
* /event-types:
@@ -34,9 +36,10 @@ import { schemaQuerySingleOrMultipleUserIds } from "~/lib/validations/shared/que
*/
async function getHandler(req: NextApiRequest) {
const { userId, isAdmin, prisma } = req;
const args: Prisma.EventTypeFindManyArgs = isAdmin
? {}
: { where: { userId }, include: { customInputs: true } };
const args: Prisma.EventTypeFindManyArgs = {
where: { userId },
};
/** Only admins can query other users */
if (!isAdmin && req.query.userId) throw new HttpError({ statusCode: 401, message: "ADMIN required" });
if (isAdmin && req.query.userId) {
@@ -44,8 +47,21 @@ async function getHandler(req: NextApiRequest) {
const userIds = Array.isArray(query.userId) ? query.userId : [query.userId || userId];
args.where = { userId: { in: userIds } };
}
const data = await prisma.eventType.findMany(args);
return { event_types: data.map((attendee) => schemaEventTypeReadPublic.parse(attendee)) };
const data = await prisma.eventType.findMany({
...args,
include: {
customInputs: true,
team: { select: { slug: true } },
users: true,
owner: { select: { username: true, id: true } },
},
});
return {
event_types: data.map((eventType) => {
const link = getCalLink(eventType);
return schemaEventTypeReadPublic.parse({ ...eventType, link });
}),
};
}
export default defaultResponder(getHandler);
@@ -0,0 +1,16 @@
import { CAL_URL } from "@calcom/lib/constants";
export default function getCalLink(eventType: {
team?: { slug: string | null } | null;
owner: { username: string | null } | null;
users?: { username: string | null }[];
slug: string;
}) {
return `${CAL_URL}/${
eventType?.team
? `team/${eventType?.team?.slug}`
: eventType?.owner
? eventType.owner.username
: eventType?.users?.[0]?.username
}/${eventType?.slug}`;
}