Files
gridpilot.gg/adapters/notifications/ports/NotificationServiceAdapter.ts
2026-01-08 15:34:51 +01:00

41 lines
1.6 KiB
TypeScript

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<void> {
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');
}
}
}
}