* add reassign host to edit dropdown * add dialog to reassign rr host * Design improvements * add translations * only show reassign for admin/owner * add first version of email template * Init rr assign endpoint * Pass booking information to rr assign endpoint * Only allow attendee of booking to reassign themselves * Send email to reassigned and cancelled member * On reassign change calendar events * Add workflows for new host * On reassign new host - rr * Fix icon * Abstract reassignment logic * Update calendar invite * Add tests * Clean up * Merge with `main` * Type fixes * Add back dialog and handle no available hosts * Handle if rr host is not organizer * Fix calendar invites when organizer doesn't change * Clean up * Clean up * Type fixes * Type fixes * Type fixes * Type fixes * Type fix * Type fixes * Type fixes * Add custom responses to evt object * Type fixes * Type fix * Type fix * Type fixes * Type fixes * Type fix * Type fix * Update tests * Type fixes * Fix tests * Fix tests * Add booking repository * Fix tests * Fix tests * Add doesUserIdHaveAccessToBooking for user * Add check if user is team admin * Check user permission tRPC route * Type fixes * Correct Promise.all * UI fixes * UI fixes * Remove unused assigned hosts prop * Type fix * Remove unused frontend code * Include user priority * Fallback to event type users for older event types * Get booking workflow reminder * Revert back to eventType.hosts * Fix lint * Handle changing workflows * Type fixes * Type fixes * Type fix * Fix tests * Update new booking imports * Fix imports * Type fix * Type fix * Fix adding all members to reassignment emails * Fix cancelled RR emails to show old host * Ensure consistent event titles * Send new event workflows to new host * Change event name if organizer changed * Fix query error * Delete old booking reference when reassigning * Type fixes * Type fixes * Fix test * Rename func isAdminOfTeamOrParentOrg * Select specific workflow fields * Address workflow feedback * Delete const * Address feedback --------- Co-authored-by: CarinaWolli <wollencarina@gmail.com>
53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
import { Prisma } from "@prisma/client";
|
|
|
|
import { prisma } from "@calcom/prisma";
|
|
import type { PartialReference } from "@calcom/types/EventManager";
|
|
|
|
const bookingReferenceSelect = Prisma.validator<Prisma.BookingReferenceSelect>()({
|
|
id: true,
|
|
type: true,
|
|
uid: true,
|
|
meetingId: true,
|
|
meetingUrl: true,
|
|
credentialId: true,
|
|
deleted: true,
|
|
bookingId: true,
|
|
});
|
|
|
|
export class BookingReferenceRepository {
|
|
static async findDailyVideoReferenceByRoomName({ roomName }: { roomName: string }) {
|
|
return prisma.bookingReference.findFirst({
|
|
where: { type: "daily_video", uid: roomName, meetingId: roomName, bookingId: { not: null } },
|
|
select: bookingReferenceSelect,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* If rescheduling a booking with new references from the EventManager. Delete the previous references and replace them with new ones
|
|
*/
|
|
static async replaceBookingReferences({
|
|
bookingId,
|
|
newReferencesToCreate,
|
|
}: {
|
|
bookingId: number;
|
|
newReferencesToCreate: PartialReference[];
|
|
}) {
|
|
const newReferenceTypes = newReferencesToCreate.map((reference) => reference.type);
|
|
|
|
await prisma.bookingReference.deleteMany({
|
|
where: {
|
|
bookingId,
|
|
type: {
|
|
in: newReferenceTypes,
|
|
},
|
|
},
|
|
});
|
|
|
|
await prisma.bookingReference.createMany({
|
|
data: newReferencesToCreate.map((reference) => {
|
|
return { ...reference, bookingId };
|
|
}),
|
|
});
|
|
}
|
|
}
|