import { Injectable } from '@nestjs/common'; import { BaseFactory } from './base.factory'; import { IntegrationStrategy } from '../strategies/integration.strategy'; import { GmailApiStrategy } from '../strategies/email/gmail-api.strategy'; import { OutlookStrategy } from '../strategies/email/outlook.strategy'; import { SendGridApiStrategy } from '../strategies/email/sendgrid-api.strategy'; @Injectable() export class EmailFactory implements BaseFactory { constructor( private gmailApiStrategy: GmailApiStrategy, private outlookStrategy: OutlookStrategy, private sendGridApiStrategy: SendGridApiStrategy, ) {} createProvider(service: string, provider: string): IntegrationStrategy { const key = `${service.toLowerCase()}_${provider.toLowerCase()}`; switch (key) { case 'api_gmail': return this.gmailApiStrategy; case 'api_outlook': return this.outlookStrategy; case 'api_sendgrid': return this.sendGridApiStrategy; default: throw new Error( `Unsupported EMAIL service/provider: ${service}/${provider}`, ); } } getSupportedCombinations(): Array<{ service: string; provider: string }> { return [ { service: 'API', provider: 'gmail' }, { service: 'API', provider: 'outlook' }, { service: 'API', provider: 'sendgrid' }, ]; } validateCombination(service: string, provider: string): boolean { return this.getSupportedCombinations().some( (combo) => combo.service.toLowerCase() === service.toLowerCase() && combo.provider.toLowerCase() === provider.toLowerCase(), ); } }