feat: return cal link in event-types query (#244)
Co-authored-by: Hariom Balhara <hariombalhara@gmail.com>
This commit is contained in:
co-authored by
Hariom Balhara
parent
cb54ab670e
commit
945ab355a5
@@ -130,5 +130,6 @@ export const schemaEventTypeReadPublic = EventType.pick({
|
||||
.nullable(),
|
||||
metadata: jsonSchema.nullable(),
|
||||
customInputs: customInputSchema.array().optional(),
|
||||
link: z.string().optional(),
|
||||
})
|
||||
);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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}`;
|
||||
}
|
||||
Reference in New Issue
Block a user