76 lines
2.0 KiB
TypeScript
76 lines
2.0 KiB
TypeScript
/**
|
|
* Infrastructure Adapter: EmailNotificationAdapter (Stub)
|
|
*
|
|
* Handles email notifications.
|
|
* Currently a stub - to be implemented when email integration is needed.
|
|
*/
|
|
|
|
import type { Notification } from '@core/notifications/domain/entities/Notification';
|
|
import type {
|
|
NotificationGateway,
|
|
NotificationDeliveryResult
|
|
} from '@core/notifications/application/ports/NotificationGateway';
|
|
import type { NotificationChannel } from '@core/notifications/domain/types/NotificationTypes';
|
|
|
|
export interface EmailAdapterConfig {
|
|
smtpHost?: string;
|
|
smtpPort?: number;
|
|
smtpUser?: string;
|
|
smtpPassword?: string;
|
|
fromAddress?: string;
|
|
}
|
|
|
|
export class EmailNotificationAdapter implements NotificationGateway {
|
|
private readonly channel: NotificationChannel = 'email';
|
|
private config: EmailAdapterConfig;
|
|
|
|
constructor(config: EmailAdapterConfig = {}) {
|
|
this.config = config;
|
|
}
|
|
|
|
async send(notification: Notification): Promise<NotificationDeliveryResult> {
|
|
if (!this.isConfigured()) {
|
|
return {
|
|
success: false,
|
|
channel: this.channel,
|
|
error: 'Email SMTP not configured',
|
|
attemptedAt: new Date(),
|
|
};
|
|
}
|
|
|
|
// TODO: Implement actual email sending
|
|
// For now, this is a stub that logs and returns success
|
|
console.log(`[Email Stub] Would send email:`, {
|
|
to: notification.recipientId, // Would need to resolve to actual email
|
|
subject: notification.title,
|
|
body: notification.body,
|
|
type: notification.type,
|
|
});
|
|
|
|
return {
|
|
success: true,
|
|
channel: this.channel,
|
|
externalId: `email-stub-${notification.id}`,
|
|
attemptedAt: new Date(),
|
|
};
|
|
}
|
|
|
|
supportsChannel(channel: NotificationChannel): boolean {
|
|
return channel === this.channel;
|
|
}
|
|
|
|
isConfigured(): boolean {
|
|
return !!(this.config.smtpHost && this.config.fromAddress);
|
|
}
|
|
|
|
getChannel(): NotificationChannel {
|
|
return this.channel;
|
|
}
|
|
|
|
/**
|
|
* Update SMTP configuration
|
|
*/
|
|
configure(config: EmailAdapterConfig): void {
|
|
this.config = { ...this.config, ...config };
|
|
}
|
|
} |