import type { NotificationService, SendNotificationCommand } from '@core/notifications/application/ports/NotificationService'; import type { INotificationRepository } from '@core/notifications/domain/repositories/INotificationRepository'; import type { INotificationPreferenceRepository } from '@core/notifications/domain/repositories/INotificationPreferenceRepository'; import type { NotificationGatewayRegistry } from '@core/notifications/application/ports/NotificationGateway'; import { SendNotificationUseCase } from '@core/notifications/application/use-cases/SendNotificationUseCase'; import type { Logger } from '@core/shared/application'; export class NotificationServiceAdapter implements NotificationService { private readonly useCase: SendNotificationUseCase; private readonly logger: Logger; constructor( notificationRepository: INotificationRepository, preferenceRepository: INotificationPreferenceRepository, gatewayRegistry: NotificationGatewayRegistry, logger: Logger, ) { this.logger = logger; this.useCase = new SendNotificationUseCase( notificationRepository, preferenceRepository, gatewayRegistry, logger, ); } async sendNotification(command: SendNotificationCommand): Promise { const result = await this.useCase.execute(command); if (result.isErr()) { const error = result.error; if (error) { this.logger.error('Failed to send notification', new Error(error.details.message)); throw new Error(error.details.message); } else { throw new Error('Unknown error sending notification'); } } } }