import { Injectable, Logger } from "@nestjs/common"; import { ConfigService } from "@nestjs/config"; import { MailerService } from "@nestjs-modules/mailer"; import type { IMailService } from "../common/interfaces/mail.interface"; @Injectable() export class MailService implements IMailService { private readonly logger = new Logger(MailService.name); private readonly domain: string; constructor( private mailerService: MailerService, private configService: ConfigService, ) { this.domain = this.configService.get("DOMAIN_NAME", "memegoat.io"); } async sendEmailValidation(email: string, token: string) { const url = `https://${this.domain}/api/auth/verify-email?token=${token}`; try { await this.mailerService.sendMail({ to: email, subject: "Validation de votre adresse email", html: `

Bonjour,

Veuillez cliquer sur le lien ci-dessous pour valider votre adresse email :

${url}

Si vous n'avez pas demandé cette validation, vous pouvez ignorer cet email.

`, }); } catch (error) { this.logger.error( `Failed to send validation email to ${email}: ${error.message}`, error.stack, ); throw error; } } async sendPasswordReset(email: string, token: string) { const url = `https://${this.domain}/api/auth/reset-password?token=${token}`; try { await this.mailerService.sendMail({ to: email, subject: "Réinitialisation de votre mot de passe", html: `

Bonjour,

Veuillez cliquer sur le lien ci-dessous pour réinitialiser votre mot de passe :

${url}

Si vous n'avez pas demandé de réinitialisation, vous pouvez ignorer cet email.

`, }); } catch (error) { this.logger.error( `Failed to send password reset email to ${email}: ${error.message}`, error.stack, ); throw error; } } }