Files
calendar/packages/features/booking-audit/lib/service/BookingAuditActionServiceRegistry.ts
98b6d63164 refactor: apply biome formatting to packages/features (#27844)
* refactor: apply biome formatting to packages/features (batch 1 - small subdirs)

Format small subdirectories in packages/features: di, flags, holidays, oauth,
settings, users, assignment-reason, selectedCalendar, hashedLink, host, form,
form-builder, availability, data-table, pbac, schedules, troubleshooter,
eventtypes, calendar-subscription, and root-level files.

Also includes straggler apps/web BookEventForm.tsx.

Co-Authored-By: Claude Opus 4.6 <[email protected]>

* refactor: apply biome formatting to packages/features (batch 2 - medium subdirs)

Format medium subdirectories in packages/features: auth, credentials,
calendars, routing-forms, routing-trace, attributes, watchlist, calAIPhone,
tasker, and webhooks.

Co-Authored-By: Claude Opus 4.6 <[email protected]>

* refactor: apply biome formatting to packages/features (batch 3 - bookings + insights)

Format bookings and insights subdirectories in packages/features.

Co-Authored-By: Claude Opus 4.6 <[email protected]>

* refactor: apply biome formatting to packages/features (batch 4 - ee)

Format packages/features/ee subdirectory covering billing, workflows,
organizations, teams, managed-event-types, round-robin, dsync,
integration-attribute-sync, and payments.

Co-Authored-By: Claude Opus 4.6 <[email protected]>

* refactor: apply biome formatting to packages/features (batch 5 - booking-audit part 1)

Format booking-audit di, actions, common, dto, repository, and types
subdirectories in packages/features/booking-audit.

Co-Authored-By: Claude Opus 4.6 <[email protected]>

* refactor: apply biome formatting to packages/features (batch 6 - booking-audit part 2)

Format booking-audit service subdirectory in packages/features/booking-audit.

Co-Authored-By: Claude Opus 4.6 <[email protected]>

---------

Co-authored-by: Claude Opus 4.6 <[email protected]>
2026-02-11 15:47:14 +01:00

108 lines
4.0 KiB
TypeScript

import type { IAuditActionService } from "../actions/IAuditActionService";
import type { BookingAuditAction } from "../repository/IBookingAuditRepository";
import { CreatedAuditActionService, type CreatedAuditData } from "../actions/CreatedAuditActionService";
import { CancelledAuditActionService, type CancelledAuditData } from "../actions/CancelledAuditActionService";
import {
RescheduledAuditActionService,
type RescheduledAuditData,
} from "../actions/RescheduledAuditActionService";
import { AcceptedAuditActionService, type AcceptedAuditData } from "../actions/AcceptedAuditActionService";
import {
RescheduleRequestedAuditActionService,
type RescheduleRequestedAuditData,
} from "../actions/RescheduleRequestedAuditActionService";
import {
AttendeeAddedAuditActionService,
type AttendeeAddedAuditData,
} from "../actions/AttendeeAddedAuditActionService";
import {
NoShowUpdatedAuditActionService,
type NoShowUpdatedAuditData,
} from "../actions/NoShowUpdatedAuditActionService";
import { RejectedAuditActionService, type RejectedAuditData } from "../actions/RejectedAuditActionService";
import {
AttendeeRemovedAuditActionService,
type AttendeeRemovedAuditData,
} from "../actions/AttendeeRemovedAuditActionService";
import {
ReassignmentAuditActionService,
type ReassignmentAuditData,
} from "../actions/ReassignmentAuditActionService";
import {
LocationChangedAuditActionService,
type LocationChangedAuditData,
} from "../actions/LocationChangedAuditActionService";
import {
SeatBookedAuditActionService,
type SeatBookedAuditData,
} from "../actions/SeatBookedAuditActionService";
import {
SeatRescheduledAuditActionService,
type SeatRescheduledAuditData,
} from "../actions/SeatRescheduledAuditActionService";
/**
* Union type for all audit action data types
* Used for type-safe handling of action-specific data
*/
export type AuditActionData =
| CreatedAuditData
| CancelledAuditData
| RescheduledAuditData
| AcceptedAuditData
| RescheduleRequestedAuditData
| AttendeeAddedAuditData
| NoShowUpdatedAuditData
| RejectedAuditData
| AttendeeRemovedAuditData
| ReassignmentAuditData
| LocationChangedAuditData
| SeatBookedAuditData
| SeatRescheduledAuditData;
/**
* BookingAuditActionServiceRegistry
*
* Centralized registry for all booking audit action services.
* Provides a single source of truth for action service mapping and eliminates
* code duplication between consumer and viewer services.
*/
export class BookingAuditActionServiceRegistry {
private readonly actionServices: Map<BookingAuditAction, IAuditActionService>;
constructor() {
const services: Array<[BookingAuditAction, IAuditActionService]> = [
["CREATED", new CreatedAuditActionService()],
["CANCELLED", new CancelledAuditActionService()],
["RESCHEDULED", new RescheduledAuditActionService()],
["ACCEPTED", new AcceptedAuditActionService()],
["RESCHEDULE_REQUESTED", new RescheduleRequestedAuditActionService()],
["ATTENDEE_ADDED", new AttendeeAddedAuditActionService()],
["NO_SHOW_UPDATED", new NoShowUpdatedAuditActionService()],
["REJECTED", new RejectedAuditActionService()],
["ATTENDEE_REMOVED", new AttendeeRemovedAuditActionService()],
["REASSIGNMENT", new ReassignmentAuditActionService()],
["LOCATION_CHANGED", new LocationChangedAuditActionService()],
["SEAT_BOOKED", new SeatBookedAuditActionService()],
["SEAT_RESCHEDULED", new SeatRescheduledAuditActionService()],
];
this.actionServices = new Map(services);
}
/**
* Get Action Service - Returns the appropriate action service for the given action type
*
* @param action - The booking audit action type
* @returns The corresponding action service instance with proper typing
* @throws Error if no service is found for the action
*/
getActionService(action: BookingAuditAction): IAuditActionService {
const service = this.actionServices.get(action);
if (!service) {
throw new Error(`No action service found for: ${action}`);
}
return service;
}
}