Refactor MailController and MailService for improved readability and consistency
This commit is contained in:
+16
-27
@@ -7,58 +7,47 @@ import {
|
||||
} from '@nestjs/common';
|
||||
import { MailService } from './mail.service';
|
||||
import { ApiTags } from '@nestjs/swagger';
|
||||
import { ApiSendMail} from './mail.decorators';
|
||||
import { ApiSendMail } from './mail.decorators';
|
||||
import { SistemaService } from 'src/sistema/sistema.service';
|
||||
import { SendCorreoDto } from 'src/mail/dto/send-email.dto';
|
||||
import { AuthService } from 'src/auth/auth.service';
|
||||
|
||||
|
||||
@ApiTags('Mail') // Grupo de endpoints
|
||||
@Controller('mail')
|
||||
export class MailController {
|
||||
constructor(
|
||||
private readonly sistemaService: SistemaService,
|
||||
private readonly mailService: MailService,
|
||||
// private readonly excelService: ExcelService,
|
||||
private readonly authService: AuthService
|
||||
|
||||
// private readonly excelService: ExcelService,
|
||||
private readonly authService: AuthService,
|
||||
) {}
|
||||
|
||||
// Endpoint para enviar correos a través de una solicitud POST
|
||||
|
||||
|
||||
|
||||
@Post('send')
|
||||
@ApiSendMail()
|
||||
async sendMail(
|
||||
@Headers() headers:{token:string},
|
||||
@Body() body: SendCorreoDto
|
||||
@Headers() headers: { token: string },
|
||||
@Body() body: SendCorreoDto,
|
||||
) {
|
||||
|
||||
if (!headers.token) {
|
||||
throw new UnauthorizedException('Header "token" es requerido');
|
||||
}
|
||||
|
||||
const result =
|
||||
await this.mailService.sendMail(body,headers.token)
|
||||
.then((value) => {
|
||||
console.log("ya acabe el correo", value);
|
||||
|
||||
})
|
||||
.catch((err)=>{
|
||||
console.log(err)
|
||||
})
|
||||
|
||||
|
||||
|
||||
const result = await this.mailService
|
||||
.sendMail(body, headers.token)
|
||||
.then((value) => {
|
||||
console.log('ya acabe el correo', value);
|
||||
})
|
||||
.catch((err) => {
|
||||
console.log(err);
|
||||
});
|
||||
|
||||
// sistem
|
||||
return result;
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
|
||||
@Post('send-excel')
|
||||
@UseInterceptors(FileInterceptor('file'))
|
||||
|
||||
+35
-85
@@ -8,24 +8,18 @@ import { SendCorreoDto } from 'src/mail/dto/send-email.dto';
|
||||
import { AuthService } from 'src/auth/auth.service';
|
||||
import { decrypt } from '../crypto/crypto.util';
|
||||
|
||||
|
||||
|
||||
@Injectable()
|
||||
export class MailService {
|
||||
|
||||
|
||||
constructor(
|
||||
private readonly sistemaService: SistemaService,
|
||||
private readonly authService: AuthService,
|
||||
@InjectRepository(Correo) private readonly correoRepository: Repository<Correo>,
|
||||
@InjectRepository(Status) private readonly statusRepository: Repository<Status>,
|
||||
@InjectRepository(Sistema) private readonly sistemaRepositosistemaRepositoryry: Repository<Sistema>
|
||||
|
||||
|
||||
@InjectRepository(Correo)
|
||||
private readonly correoRepository: Repository<Correo>,
|
||||
@InjectRepository(Status)
|
||||
private readonly statusRepository: Repository<Status>,
|
||||
@InjectRepository(Sistema)
|
||||
private readonly sistemaRepositosistemaRepositoryry: Repository<Sistema>,
|
||||
) {
|
||||
|
||||
|
||||
|
||||
/* this.transporter = nodemailer.createTransport({
|
||||
host: 'smtp-relay.gmail.com',
|
||||
port: 587,
|
||||
@@ -36,8 +30,6 @@ export class MailService {
|
||||
pass: process.env.PASS_GMAIL,
|
||||
},
|
||||
}); */
|
||||
|
||||
|
||||
/*
|
||||
this.transporter = nodemailer.createTransport({
|
||||
host: 'smtp.gmail.com', // o smtp‑relay.gmail.com (ver punto 2)
|
||||
@@ -54,7 +46,6 @@ export class MailService {
|
||||
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
this.transporter = nodemailer.createTransport({
|
||||
host: 'localhost',
|
||||
@@ -64,84 +55,60 @@ export class MailService {
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
async findAllBySistema(TOKEN: string, nombreSistema: string) {
|
||||
|
||||
|
||||
if (!TOKEN) {
|
||||
throw new UnauthorizedException('Header "Password" es requerido');
|
||||
}
|
||||
|
||||
|
||||
|
||||
const sistem = await this.sistemaService.acceso(TOKEN)
|
||||
const sistem = await this.sistemaService.acceso(TOKEN);
|
||||
if (!sistem) {
|
||||
throw new UnauthorizedException('Password incorrecto');
|
||||
}
|
||||
|
||||
|
||||
const result = await this.correoRepository.find({
|
||||
where: {
|
||||
id_sistema: { nombre_sistema: nombreSistema }
|
||||
id_sistema: { nombre_sistema: nombreSistema },
|
||||
},
|
||||
relations: {
|
||||
id_sistema: true,
|
||||
id_status: true,
|
||||
},
|
||||
}
|
||||
)
|
||||
return result
|
||||
});
|
||||
return result;
|
||||
}
|
||||
|
||||
async sendMail(sendEmail: SendCorreoDto, token: string) {
|
||||
console.log("token", token)
|
||||
let payload
|
||||
console.log('token', token);
|
||||
let payload;
|
||||
|
||||
payload = await this.authService.verificarToken(token);
|
||||
|
||||
console.log("payload", payload)
|
||||
console.log('payload', payload);
|
||||
if (!payload || !payload.nombre) {
|
||||
throw new UnauthorizedException('Token inválido o incompleto');
|
||||
}
|
||||
|
||||
const sistem = await this.sistemaService.findByNombre(payload.nombre)
|
||||
|
||||
const sistem = await this.sistemaService.findByNombre(payload.nombre);
|
||||
|
||||
if (!sistem) {
|
||||
throw new UnauthorizedException('sistema No encontrado');
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
const decryptedPassword = decrypt(
|
||||
sistem.email_password_encrypted,
|
||||
sistem.email_password_iv
|
||||
sistem.email_password_iv,
|
||||
);
|
||||
|
||||
console.log('decryptedPassword', decryptedPassword);
|
||||
|
||||
const decryptedToken = decrypt(
|
||||
sistem.refreshToken_encrypted,
|
||||
sistem.refreshToken_iv
|
||||
sistem.refreshToken_iv,
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
console.log('decryptedToken', decryptedToken);
|
||||
|
||||
const transporter = nodemailer.createTransport({
|
||||
/* host: 'smtp.gmail.com', // o smtp‑relay.gmail.com (ver punto 2)
|
||||
port: 587,
|
||||
secure: false,
|
||||
requireTLS: true, // TLS STARTTLS
|
||||
auth: { user:sistem.email, pass:decryptedPassword},
|
||||
pool: true, // <‑‑ activa reuse
|
||||
maxConnections: 1, // una sola conexión viva
|
||||
maxMessages: 100, // reabrir después de 100 envíos
|
||||
rateDelta: 2000, // ventana 1 s
|
||||
rateLimit: 1 // máx. 5 mensajes/seg
|
||||
*/
|
||||
|
||||
service: 'gmail',
|
||||
auth: {
|
||||
type: 'OAuth2',
|
||||
@@ -155,16 +122,13 @@ export class MailService {
|
||||
maxConnections: 1,
|
||||
maxMessages: 100,
|
||||
rateDelta: 2000,
|
||||
rateLimit: 1
|
||||
|
||||
|
||||
rateLimit: 1,
|
||||
});
|
||||
|
||||
|
||||
|
||||
console.log("estos son los archivos adjuntos en el service", sendEmail.adjuntos);
|
||||
|
||||
|
||||
console.log(
|
||||
'estos son los archivos adjuntos en el service',
|
||||
sendEmail.adjuntos,
|
||||
);
|
||||
|
||||
const mailOptions = {
|
||||
from: sistem.email,
|
||||
@@ -185,29 +149,22 @@ export class MailService {
|
||||
return {
|
||||
filename: adj.filename || 'qr.png',
|
||||
content: Buffer.from(base64Clean, adj.encoding || 'base64'),
|
||||
cid: adj.cid || 'qrCode', // el mismo que uses en <img src="cid:..."/>
|
||||
contentType: 'image/png' // recomendable para que sepa que es PNG
|
||||
cid: adj.cid || 'qrCode', // el mismo que uses en <img src="cid:..."/>
|
||||
contentType: 'image/png', // recomendable para que sepa que es PNG
|
||||
};
|
||||
})
|
||||
|
||||
|
||||
}),
|
||||
};
|
||||
|
||||
|
||||
console.log(mailOptions);
|
||||
|
||||
|
||||
|
||||
console.log("mailOptions", mailOptions);
|
||||
|
||||
let resMail = await transporter.sendMail(mailOptions);
|
||||
if (!resMail) throw new Error("")
|
||||
if (!resMail) throw new Error('');
|
||||
|
||||
const statusTexto = resMail.accepted.length > 0 ? 'Enviado' : 'Fallido';
|
||||
|
||||
const statusTexto = resMail.accepted.length > 0 ? "Enviado" : "Fallido";
|
||||
|
||||
|
||||
let status = await this.statusRepository.findOne({ where: { status: statusTexto } });
|
||||
|
||||
let status = await this.statusRepository.findOne({
|
||||
where: { status: statusTexto },
|
||||
});
|
||||
|
||||
if (!status) {
|
||||
status = this.statusRepository.create({ status: statusTexto });
|
||||
@@ -221,20 +178,13 @@ export class MailService {
|
||||
fecha_enviado: new Date(),
|
||||
destinatario: sendEmail.to,
|
||||
remitente: sistem.email,
|
||||
|
||||
});
|
||||
|
||||
|
||||
if (!resMail) {
|
||||
throw new Error("fallo")
|
||||
throw new Error('fallo');
|
||||
}
|
||||
this.correoRepository.save(info);
|
||||
|
||||
|
||||
|
||||
return (statusTexto);
|
||||
return statusTexto;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user