diff --git a/packages/features/booking-audit/lib/service/BookingAuditViewerService.ts b/packages/features/booking-audit/lib/service/BookingAuditViewerService.ts index d17967eb1a30a0..b538fec90e1705 100644 --- a/packages/features/booking-audit/lib/service/BookingAuditViewerService.ts +++ b/packages/features/booking-audit/lib/service/BookingAuditViewerService.ts @@ -26,6 +26,10 @@ interface BookingAuditViewerServiceDeps { type EnrichedAuditLog = { id: string; bookingUid: string; +<<<<<<< HEAD +======= + linkedBookingUid: string | null; +>>>>>>> c40ba20ff7 (fix: restore BookingAuditViewerService files) type: BookingAuditType; action: BookingAuditAction; timestamp: string; @@ -112,6 +116,10 @@ export class BookingAuditViewerService { return { id: log.id, bookingUid: log.bookingUid, +<<<<<<< HEAD +======= + linkedBookingUid: log.linkedBookingUid, +>>>>>>> c40ba20ff7 (fix: restore BookingAuditViewerService files) type: log.type, action: log.action, timestamp: log.timestamp.toISOString(), diff --git a/packages/features/di/containers/BookingAuditViewerService.container.ts b/packages/features/di/containers/BookingAuditViewerService.container.ts new file mode 100644 index 00000000000000..a5dae8c300762a --- /dev/null +++ b/packages/features/di/containers/BookingAuditViewerService.container.ts @@ -0,0 +1,18 @@ +import type { BookingAuditViewerService } from "@calcom/features/booking-audit/lib/service/BookingAuditViewerService"; +import { BOOKING_AUDIT_DI_TOKENS } from "@calcom/features/booking-audit/di/tokens"; +import { DI_TOKENS } from "@calcom/features/di/tokens"; +import { prismaModule } from "@calcom/features/di/modules/Prisma"; +import { moduleLoader as bookingAuditRepositoryModuleLoader } from "@calcom/features/booking-audit/di/BookingAuditRepository.module"; +import { moduleLoader as bookingAuditViewerServiceModuleLoader } from "@calcom/features/booking-audit/di/BookingAuditViewerService.module"; + +import { createContainer } from "../di"; + +const container = createContainer(); +container.load(DI_TOKENS.PRISMA_MODULE, prismaModule); +bookingAuditRepositoryModuleLoader.loadModule(container); +bookingAuditViewerServiceModuleLoader.loadModule(container); + +export function getBookingAuditViewerService() { + return container.get(BOOKING_AUDIT_DI_TOKENS.BOOKING_AUDIT_VIEWER_SERVICE); +} + diff --git a/packages/trpc/server/routers/viewer/bookings/getAuditLogs.handler.ts b/packages/trpc/server/routers/viewer/bookings/getAuditLogs.handler.ts new file mode 100644 index 00000000000000..adf2a9cc980a33 --- /dev/null +++ b/packages/trpc/server/routers/viewer/bookings/getAuditLogs.handler.ts @@ -0,0 +1,32 @@ +import type { PrismaClient } from "@calcom/prisma/client"; + +import { getBookingAuditViewerService } from "@calcom/features/di/containers/BookingAuditViewerService.container"; + +import type { TrpcSessionUser } from "../../../types"; +import type { TGetAuditLogsInputSchema } from "./getAuditLogs.schema"; + +type GetAuditLogsOptions = { + ctx: { + user: NonNullable; + prisma: PrismaClient; + }; + input: TGetAuditLogsInputSchema; +}; + +export const getAuditLogsHandler = async ({ ctx, input }: GetAuditLogsOptions) => { + const { user } = ctx; + const { bookingUid } = input; + + const bookingAuditViewerService = getBookingAuditViewerService(); + + // Get audit logs with full enrichment and formatting + const result = await bookingAuditViewerService.getAuditLogsForBooking( + bookingUid, + user.id, + user.email, + user.locale ?? "en" + ); + + return result; +}; + diff --git a/packages/trpc/server/routers/viewer/bookings/getAuditLogs.schema.ts b/packages/trpc/server/routers/viewer/bookings/getAuditLogs.schema.ts new file mode 100644 index 00000000000000..9ed51a0328afc1 --- /dev/null +++ b/packages/trpc/server/routers/viewer/bookings/getAuditLogs.schema.ts @@ -0,0 +1,8 @@ +import { z } from "zod"; + +export const ZGetAuditLogsInputSchema = z.object({ + bookingUid: z.string(), +}); + +export type TGetAuditLogsInputSchema = z.infer; +