From 090f4d710b945b439f8085e0de1f261baa8d6835 Mon Sep 17 00:00:00 2001 From: KarimSoto Date: Sun, 2 Jun 2024 20:09:44 -0700 Subject: [PATCH] anadi una funcion que se ejecuta a media noche que verifica a los usuarios que tienen su cuenta vencida y que dicha expiracion es el dia correspondiente, esto para evitar que se reenvien correos en dias posteriores, agregue un nuevo cuerpo para los correos de tipo 'vencimiento de suscripcion' y cambie algunos otros detallitos --- server/app.js | 6 ++ server/controllers/perfil-data.controllers.js | 59 ++++++++++++++++++- server/package-lock.json | 20 +++++++ server/package.json | 1 + server/services/mail.service.js | 56 +++++++++++++++++- 5 files changed, 140 insertions(+), 2 deletions(-) diff --git a/server/app.js b/server/app.js index f9e7976e..7a544859 100644 --- a/server/app.js +++ b/server/app.js @@ -5,6 +5,7 @@ import https from "https"; import * as fs from "fs"; import multer from 'multer'; import sharp from 'sharp'; +import cron from 'node-cron'; @@ -238,6 +239,11 @@ app.get("/api/step1.5", async (solicitud, respuesta) => { } }); + +// cron.schedule("0 0 * * *",()=>{ +// perfil.LectorRenovacionSuscripcion() +// }); + app.get("*", (solicitud, respuesta) => { respuesta.sendFile(path.join(_dirname, "../client/dist/index.html")); }); diff --git a/server/controllers/perfil-data.controllers.js b/server/controllers/perfil-data.controllers.js index aa6b2f18..d29769df 100644 --- a/server/controllers/perfil-data.controllers.js +++ b/server/controllers/perfil-data.controllers.js @@ -3,6 +3,7 @@ import bcryptjs from 'bcryptjs'; import dotenv from 'dotenv'; import mysql from "mysql2"; import Stripe from 'stripe'; +import { conexion } from "../db/connection.js"; import {methods as servicios} from "../services/mail.service.js"; dotenv.config(); @@ -1102,6 +1103,61 @@ async function deleteSuscripcion(solicitud,respuesta){ } +// esta funcion no recibe ni solicitud ni manda una respuesta +async function LectorRenovacionSuscripcion(){ + + //asegurarnos de no enviar correos dias despues de cuando se le vencio + let consulta = 'select * from clienteMembresia where activo = ? and fkMembresia = 1 and fechaExpiracion = curdate()'; + + // las consultas normales, osea las que he manejado a lo largo del proyecto las suelo hacer asi: + let [fields] = await conexion.query(mysql.format(consulta,[0])); + + let f = fields; + + let usuarios_vencidos = []; + + if(f != undefined){ + // seleccionar los usuarios que se les vencio su suscripcion + for(let i in f){ + usuarios_vencidos.push(f[i].fkCliente); + } + + console.log(usuarios_vencidos); + + //mandarle correo a dichos usuario + for(let i in usuarios_vencidos){ + let consulta_correo = 'select * from usuario where pkIdUsuario = ?'; + + let [correo_usuario] = await conexion.query(mysql.format(consulta_correo,[usuarios_vencidos[i]])); + + let CE = correo_usuario[0].email; + + let nU = correo_usuario[0].nombre; + let pU = correo_usuario[0].apellidoP; + let mU = correo_usuario[0].apellidoM; + + let full_name = `${pU} ${mU} ${nU}`; + + try{ + //toca enviar al usuario un correo + await servicios.vencimientoSuscripcion(CE,"token",full_name); + }catch(error){ + console.log('envio incorrecto'); + console.log(error); + } + } + } + + +} + + + + + + + + @@ -1164,5 +1220,6 @@ export const methods = { Insert_to_Monedero, getOpcionesPago, getSuscripcion, - deleteSuscripcion + deleteSuscripcion, + LectorRenovacionSuscripcion } \ No newline at end of file diff --git a/server/package-lock.json b/server/package-lock.json index e434a30c..074f9416 100644 --- a/server/package-lock.json +++ b/server/package-lock.json @@ -23,6 +23,7 @@ "jsonwebtoken": "^9.0.2", "multer": "^1.4.5-lts.1", "mysql2": "^3.9.8", + "node-cron": "^3.0.3", "node-fetch": "^3.3.2", "nodemailer": "^6.9.13", "sharp": "^0.33.4", @@ -3303,6 +3304,25 @@ "node": ">= 0.4.0" } }, + "node_modules/node-cron": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz", + "integrity": "sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==", + "dependencies": { + "uuid": "8.3.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/node-cron/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/node-domexception": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", diff --git a/server/package.json b/server/package.json index ffed836c..5d3c8047 100644 --- a/server/package.json +++ b/server/package.json @@ -149,6 +149,7 @@ "jsonwebtoken": "^9.0.2", "multer": "^1.4.5-lts.1", "mysql2": "^3.9.8", + "node-cron": "^3.0.3", "node-fetch": "^3.3.2", "nodemailer": "^6.9.13", "sharp": "^0.33.4", diff --git a/server/services/mail.service.js b/server/services/mail.service.js index 910ac8eb..0ca98313 100644 --- a/server/services/mail.service.js +++ b/server/services/mail.service.js @@ -38,6 +38,16 @@ async function CancelacionSuscripcion(direccion,token,full_name){ } +async function vencimientoSuscripcion(direccion,token,full_name){ + return await transporter.sendMail({ + from:process.env.EMAIL_USER, + to:direccion, + subject:'Tu suscripcion ha caducado', + html:cuerpoVencimiento(token,full_name) + }) +} + + async function Cambio_de_correo(token,full_name,id,correo){ return await transporter.sendMail({ from:process.env.EMAIL_USER, @@ -308,6 +318,49 @@ function cuerpoCancelacion(token,full_name){ } +function cuerpoVencimiento(token,full_name){ + return ` + + + + + + +
+
+ Tu suscripcion ha vencido el dia de hoy. +
+
+

Estimad@ ${full_name}, le informamos que su suscripcion ha vencido el dia de hoy, sin embargo, si quiere seguir contando con nuestros descuentos, lo invitamos a que vuelva a que adquiera de nueva cuenta su suscripcion. Si no quiere pagar la suscripcion de forma manual constatemente, puede activar la renovacion automatica

+
+ +
+ + `; +} + + @@ -316,5 +369,6 @@ export const methods = { Cambio_de_correo, Codigo_de_Verificacion, Confirmacion_ContraseƱa, - CancelacionSuscripcion + CancelacionSuscripcion, + vencimientoSuscripcion } \ No newline at end of file