import { z } from "zod"; import type { Actor, BookingAuditContext } from "../dto/types"; import type { ActionSource } from "../types/actionSource"; import { AcceptedAuditActionService } from "../actions/AcceptedAuditActionService"; import { AttendeeAddedAuditActionService } from "../actions/AttendeeAddedAuditActionService"; import { AttendeeRemovedAuditActionService } from "../actions/AttendeeRemovedAuditActionService"; import { CancelledAuditActionService } from "../actions/CancelledAuditActionService"; import { CreatedAuditActionService } from "../actions/CreatedAuditActionService"; import { LocationChangedAuditActionService } from "../actions/LocationChangedAuditActionService"; import { NoShowUpdatedAuditActionService } from "../actions/NoShowUpdatedAuditActionService"; import { ReassignmentAuditActionService } from "../actions/ReassignmentAuditActionService"; import { RejectedAuditActionService } from "../actions/RejectedAuditActionService"; import { RescheduleRequestedAuditActionService } from "../actions/RescheduleRequestedAuditActionService"; import { RescheduledAuditActionService } from "../actions/RescheduledAuditActionService"; import { SeatBookedAuditActionService } from "../actions/SeatBookedAuditActionService"; import { SeatRescheduledAuditActionService } from "../actions/SeatRescheduledAuditActionService"; /** * BookingAuditProducerService Interface * * Producer abstraction for queueing booking audit tasks. * Allows for multiple implementations (e.g., Tasker, Trigger.dev). * * Uses specialized methods per action type for better TypeScript performance * and type safety, avoiding large discriminated unions. * * Implementations: * - BookingAuditTaskerProducerService: Uses Tasker for local/background jobs * - BookingAuditTriggerProducerService: (Future) Uses Trigger.dev for cloud jobs */ export interface BookingAuditProducerService { queueCreatedAudit(params: { bookingUid: string; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; data: z.infer; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueRescheduledAudit(params: { bookingUid: string; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; data: z.infer; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueAcceptedAudit(params: { bookingUid: string; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; data: z.infer; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueCancelledAudit(params: { bookingUid: string; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; data: z.infer; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueRescheduleRequestedAudit(params: { bookingUid: string; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; data: z.infer; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueAttendeeAddedAudit(params: { bookingUid: string; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; data: z.infer; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueNoShowUpdatedAudit(params: { bookingUid: string; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; data: z.infer; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueRejectedAudit(params: { bookingUid: string; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; data: z.infer; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueAttendeeRemovedAudit(params: { bookingUid: string; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; data: z.infer; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueReassignmentAudit(params: { bookingUid: string; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; data: z.infer; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueLocationChangedAudit(params: { bookingUid: string; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; data: z.infer; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueSeatBookedAudit(params: { bookingUid: string; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; data: z.infer; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueSeatRescheduledAudit(params: { bookingUid: string; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; data: z.infer; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueBulkAcceptedAudit(params: { bookings: Array<{ bookingUid: string; data: z.infer; }>; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueBulkCancelledAudit(params: { bookings: Array<{ bookingUid: string; data: z.infer; }>; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueBulkCreatedAudit(params: { bookings: Array<{ bookingUid: string; data: z.infer; }>; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueBulkRescheduledAudit(params: { bookings: Array<{ bookingUid: string; data: z.infer; }>; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; queueBulkRejectedAudit(params: { bookings: Array<{ bookingUid: string; data: z.infer; }>; actor: Actor; organizationId: number | null; source: ActionSource; operationId?: string | null; context?: BookingAuditContext; isBookingAuditEnabled: boolean; }): Promise; }