mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-27 00:52:50 +00:00
36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
import { Injectable, Logger, NotFoundException } from "@nestjs/common";
|
|
import { EmailNotificationStrategy } from "./strategies/notification.email.strategy";
|
|
import { NotificationStrategy } from "./strategies/notification.strategy";
|
|
import { SmsNotificationStrategy } from "./strategies/notification.sms.strategy";
|
|
|
|
|
|
|
|
type StrategyMethod = "sms" | "email"
|
|
@Injectable()
|
|
export class NotificationsService {
|
|
private readonly logger = new Logger(NotificationsService.name);
|
|
private readonly strategies: Map<StrategyMethod, NotificationStrategy>
|
|
constructor(private readonly email: EmailNotificationStrategy, private readonly sms: SmsNotificationStrategy) {
|
|
this.strategies = new Map([
|
|
["sms", this.sms as NotificationStrategy],
|
|
["email", this.email as NotificationStrategy]
|
|
])
|
|
}
|
|
|
|
/**
|
|
* Dispatch a notification to an operator or customer.
|
|
* TODO: wire to email/SMS provider (SendGrid, SMS API, etc.) via a mailer service.
|
|
*/
|
|
|
|
async directSend(method: StrategyMethod, recipient: string, message: string) {
|
|
const strategy = this.strategies.get(method);
|
|
if (!strategy) {
|
|
throw new NotFoundException();
|
|
}
|
|
const sent = await strategy.send(recipient, message)
|
|
this.logger.log(`is sent - ${sent}`)
|
|
}
|
|
|
|
|
|
}
|