/** * Infrastructure Adapter: InAppNotificationAdapter * * Handles in-app notifications (stored in database, shown in UI). * This is the primary/default notification channel. */ import type { Notification } from '../../domain/entities/Notification'; import type { INotificationGateway, NotificationDeliveryResult } from '../../application/ports/INotificationGateway'; import type { NotificationChannel } from '../../domain/types/NotificationTypes'; export class InAppNotificationAdapter implements INotificationGateway { private readonly channel: NotificationChannel = 'in_app'; /** * For in_app, sending is essentially a no-op since the notification * is already persisted by the use case. This just confirms delivery. */ async send(notification: Notification): Promise { // In-app notifications are stored directly in the repository // This adapter just confirms the "delivery" was successful return { success: true, channel: this.channel, externalId: notification.id, attemptedAt: new Date(), }; } supportsChannel(channel: NotificationChannel): boolean { return channel === this.channel; } isConfigured(): boolean { return true; // Always configured } getChannel(): NotificationChannel { return this.channel; } }