* added dropdown for no-shows in past bookings * added layout * nit * todo comment: figure out how to close dropdown * more todo comments * Adds TRPC route among other WIP * functional update * fixes type err * fix type err * fix: styles * strikethrough in email * NITs * removed stale comment * add tests * err comment --------- Co-authored-by: Peer Richelsen <peer@cal.com> Co-authored-by: Peer Richelsen <peeroke@gmail.com> Co-authored-by: sean-brydon <sean@cal.com> Co-authored-by: sean-brydon <55134778+sean-brydon@users.noreply.github.com>
65 lines
1.5 KiB
TypeScript
65 lines
1.5 KiB
TypeScript
import logger from "@calcom/lib/logger";
|
|
import { prisma } from "@calcom/prisma";
|
|
|
|
import type { TNoShowInputSchema } from "./noShow.schema";
|
|
|
|
type NoShowOptions = {
|
|
input: TNoShowInputSchema;
|
|
};
|
|
|
|
export const noShowHandler = async ({ input }: NoShowOptions) => {
|
|
const { bookingUid, attendees } = input;
|
|
|
|
try {
|
|
const attendeeEmails = attendees?.map((attendee) => attendee.email) || [];
|
|
if (attendees && attendeeEmails.length > 0) {
|
|
const allAttendees = await prisma.attendee.findMany({
|
|
where: {
|
|
AND: [
|
|
{
|
|
booking: {
|
|
uid: bookingUid,
|
|
},
|
|
email: {
|
|
in: attendeeEmails,
|
|
},
|
|
},
|
|
],
|
|
},
|
|
select: {
|
|
id: true,
|
|
email: true,
|
|
},
|
|
});
|
|
|
|
const updatePromises = attendees.map((attendee) => {
|
|
const attendeeToUpdate = allAttendees.find((a) => a.email === attendee.email);
|
|
|
|
if (attendeeToUpdate) {
|
|
return prisma.attendee.update({
|
|
where: { id: attendeeToUpdate.id },
|
|
data: { noShow: attendee.noShow },
|
|
});
|
|
}
|
|
});
|
|
|
|
await Promise.all(updatePromises);
|
|
} else {
|
|
await prisma.booking.update({
|
|
where: {
|
|
uid: bookingUid,
|
|
},
|
|
data: {
|
|
noShowHost: true,
|
|
},
|
|
});
|
|
}
|
|
} catch (error) {
|
|
if (error instanceof Error) {
|
|
logger.error(error.message);
|
|
}
|
|
}
|
|
};
|
|
|
|
export default noShowHandler;
|