Files
HiveGrid-Wireframes/03 Quellen und Referenzen/hivegrid-cloud/apps/web/app/modules/booking/services/bookingAutomationEvents.server.ts
T

79 lines
2.7 KiB
TypeScript

import { buildWorkflowTriggerOutboxEvent } from "@hivegrid/queue";
import { buildCalendarCreatedWorkflowEvent } from "~/services/automation/automation.producer-events.server";
export { buildCalendarCreatedWorkflowEvent } from "~/services/automation/automation.producer-events.server";
export function buildBookingBookedWorkflowEvents(input: {
readonly tenantId: string;
readonly appointmentId: string;
readonly bookingPageId: string;
readonly bookingPageSlug: string;
readonly providerUserId: string;
readonly calendarEventId: string;
readonly startAt: Date;
readonly endAt: Date;
readonly kontaktId: string | null;
}) {
return [
buildWorkflowTriggerOutboxEvent({
tenantId: input.tenantId,
event: "booking.appointment_booked",
data: {
appointmentId: input.appointmentId,
bookingPageId: input.bookingPageId,
bookingPageSlug: input.bookingPageSlug,
appointmentType: input.bookingPageSlug,
terminart: input.bookingPageSlug,
providerUserId: input.providerUserId,
mitarbeiter: input.providerUserId,
startAt: input.startAt.toISOString(),
endAt: input.endAt.toISOString(),
kontaktId: input.kontaktId,
},
userId: null,
sourceId: `booking:${input.appointmentId}:booked`,
}),
buildCalendarCreatedWorkflowEvent({
tenantId: input.tenantId,
calendarEventId: input.calendarEventId,
userId: input.providerUserId,
calendarKey: "hauptkalender",
eventKind: "termin",
source: "booking",
sourceEntityId: input.appointmentId,
startsAt: input.startAt,
endsAt: input.endAt,
}),
] as const;
}
export function buildBookingCancelledWorkflowEvent(input: {
readonly tenantId: string;
readonly appointmentId: string;
readonly bookingPageId: string;
readonly bookingPageSlug: string;
readonly providerUserId: string;
readonly cancelledByKind: "customer" | "provider" | "system";
readonly cancellationReason: string;
readonly cancelledAt: Date;
readonly actorUserId: string | null;
}) {
return buildWorkflowTriggerOutboxEvent({
tenantId: input.tenantId,
event: "booking.appointment_cancelled",
data: {
appointmentId: input.appointmentId,
bookingPageId: input.bookingPageId,
bookingPageSlug: input.bookingPageSlug,
appointmentType: input.bookingPageSlug,
terminart: input.bookingPageSlug,
providerUserId: input.providerUserId,
cancelledByKind: input.cancelledByKind,
cancellationReason: input.cancellationReason,
cancelledAt: input.cancelledAt.toISOString(),
},
userId: input.actorUserId,
sourceId: `booking:${input.appointmentId}:cancelled:${input.cancelledAt.getTime()}`,
});
}