Revue script relances expiration abonnements prémium pour test en prod.

This commit is contained in:
Fabrice PENHOËT 2020-09-10 10:54:50 +02:00
parent b572306735
commit 5c8d68733f
2 changed files with 12 additions and 14 deletions

View File

@ -41,7 +41,7 @@ exports.unsubscribeLink = async (req, res, next) =>
// CRONS // CRONS
// + une autre notification le jour "J" ??? vérifier si l'utilisateur actif les dernières 48H et laisser les autres tranquilles ? // Envoi des notifications aux abonnés arrivés à quelques jours de la fin de leur période d'abonnement gratuit.
exports.notifyExpirationFreeAccount= async(req, res, next) => exports.notifyExpirationFreeAccount= async(req, res, next) =>
{ {
try try
@ -67,7 +67,6 @@ exports.notifyExpirationFreeAccount= async(req, res, next) =>
let userInfos=await userCtrl.searchUserById(user.UserId); let userInfos=await userCtrl.searchUserById(user.UserId);
if(userInfos && userInfos.User.status=="user") if(userInfos && userInfos.User.status=="user")
{ {
//const token=jwt.sign({ userId: userInfos.User.id }, config.tokenPrivateKey, { expiresIn: config.tokenLoginLinkTimeInHours });
const mapMail = const mapMail =
{ {
SITE_NAME: config.siteName, SITE_NAME: config.siteName,
@ -95,7 +94,6 @@ exports.notifyExpirationFreeAccount= async(req, res, next) =>
else else
res.message=users.length+txt.mailEndFreeTimeMessage; res.message=users.length+txt.mailEndFreeTimeMessage;
res.status(200).json(true); res.status(200).json(true);
console.log(users.length+txt.mailEndFreeTimeMessage);
next(); next();
} }
catch(e) catch(e)
@ -104,8 +102,9 @@ exports.notifyExpirationFreeAccount= async(req, res, next) =>
} }
} }
// Envoi des notifications aux abonnés arrivés à quelques jours de la fin de leur période d'abonnement prémium.
exports.notifyExpirationAccount= async(req, res, next) => exports.notifyExpirationAccount= async(req, res, next) =>
{ // utiliser la vue puis des recherches en sql natif ou ajouter un modèle : https://stackoverflow.com/questions/48407329/cant-able-to-create-views-in-mysql-using-sequelize-orm {
try try
{ {
const db = require("../models/index"); const db = require("../models/index");
@ -128,27 +127,26 @@ exports.notifyExpirationAccount= async(req, res, next) =>
}); });
return users; return users;
} }
const sendNotification= async (user, mail) => // utiliser la paramètre "mail" pour adapter le texte du mail ! const sendNotification= async (user, mail) =>
{ {
let userInfos=await searchUserById(user.UserId); let userInfos=await searchUserById(user.UserId);
if(userInfos && userInfos.User.status=="user") if(userInfos && userInfos.User.status=="user")
{ {
//const token=jwt.sign({ userId: userInfos.User.id }, config.tokenPrivateKey, { expiresIn: config.tokenLoginLinkTimeInHours });
const mapMail = const mapMail =
{ {
SITE_NAME: config.siteName, SITE_NAME: config.siteName,
USER_NAME: userInfos.User.name, USER_NAME: userInfos.User.name,
LINK_URL : config.siteUrl+"/"+configTpl.updateAccountPage+"#abo" LINK_URL : config.siteUrl+"/"+configTpl.updateAccountPage+"#subscribe"
}; };
const mailDatas= const mailDatas=
{ {
mailSubject: txt.mailExpirationSubject, mailSubject: txt.mailExpirationSubject,
mailPreheader: txt.mailExpirationSubject, mailPreheader: txt.mailExpirationSubject,
mailTitle: txt.mailExpirationSubject, mailTitle: txt.mailExpirationSubject,
mailHeaderLinkUrl: config.siteUrl+"/"+configTpl.updateAccountPage+"#abo", mailHeaderLinkUrl: config.siteUrl+"/"+configTpl.updateAccountPage+"#subscribe",
mailHeaderLinkTxt: txt.mailExpirationLinkTxt, mailHeaderLinkTxt: txt.mailExpirationLinkTxt,
mailMainContent: tool.replaceAll(txt.mailExpirationBodyHTML, mapMail), mailMainContent: tool.replaceAll(txt.mailExpirationBodyHTML, mapMail),
linksCTA: [{ url:config.siteUrl+"/"+configTpl.updateAccountPage+"#abo", txt:txt.mailExpirationLinkTxt }], linksCTA: [{ url:config.siteUrl+"/"+configTpl.updateAccountPage+"#subscribe", txt:txt.mailExpirationLinkTxt }],
mailRecipientAddress: userInfos.User.email mailRecipientAddress: userInfos.User.email
} }
await toolMail.sendMail(userInfos.User.smtp, userInfos.User.email, txt.mailExpirationSubject, tool.replaceAll(txt.mailExpirationBodyTxt, mapMail), "", mailDatas); await toolMail.sendMail(userInfos.User.smtp, userInfos.User.email, txt.mailExpirationSubject, tool.replaceAll(txt.mailExpirationBodyTxt, mapMail), "", mailDatas);
@ -156,11 +154,11 @@ exports.notifyExpirationAccount= async(req, res, next) =>
} }
// première salve : // première salve :
let users1=await getUsers(config.accountExpirationFirstNotificationInDays); let users1=await getUsers(config.accountExpirationFirstNotificationInDays);
for(i in users1) for(let i in users1)
sendNotification(users1[i], "first"); sendNotification(users1[i], "first");
// deuxième relance : // deuxième relance :
let users2=await getUsers(config.accountExpirationSecondNotificationInDays); let users2=await getUsers(config.accountExpirationSecondNotificationInDays);
for(i in users2) for(let i in users2)
sendNotification(users2[i], "second"); sendNotification(users2[i], "second");
if(res.message) if(res.message)
res.message+="\n"+tool.replaceAll(txt.mailExpirationMessage, { FIRST:users1.length , SECOND:users2.length }); res.message+="\n"+tool.replaceAll(txt.mailExpirationMessage, { FIRST:users1.length , SECOND:users2.length });

View File

@ -21,14 +21,14 @@ module.exports =
mailExpirationSubject: "Votre abonnement va bientôt expirer", mailExpirationSubject: "Votre abonnement va bientôt expirer",
mailExpirationLinkTxt : "Prolonger mon abonnement.", mailExpirationLinkTxt : "Prolonger mon abonnement.",
mailExpirationBodyTxt: "Bonjour USER_NAME,\n\nVotre abonnement à SITE_NAME va expirer d'ici quelques jours.\n\nPour continuer à utiliser le site, vous pouvez le prolonger dès aujourd'hui :\nLINK_URL", mailExpirationBodyTxt: "Bonjour USER_NAME,\n\nVotre abonnement à SITE_NAME va expirer d'ici quelques jours.\n\nPour continuer à utiliser SITE_NAME, vous pouvez le prolonger dès aujourd'hui :\nLINK_URL",
mailExpirationBodyHTML: "<h3>Bonjour USER_NAME,</h3><p>Votre abonnement à SITE_NAME va expirer d'ici quelques jours.<br><br>Pour continuer à utiliser SITE_NAME, vous pouvez le prolonger dès aujourd'hui en cliquant sur le lien ci-dessous.</p>", mailExpirationBodyHTML: "<h3>Bonjour USER_NAME,</h3><p>Votre abonnement à SITE_NAME va expirer d'ici quelques jours.<br><br>Pour continuer à utiliser SITE_NAME, vous pouvez le prolonger dès aujourd'hui en cliquant sur le lien ci-dessous.</p>",
mailExpirationMessage: "FIRST premières et SECOND deuxièmes relances envoyées pour des abonnements expirant d'ici peu.", mailExpirationMessage: "FIRST premières et SECOND deuxièmes relances envoyées pour des abonnements expirant d'ici peu.",
infosNbDays: "Votre abonnement est encore valable <b>pendant NB_DAYS jours</b>.<br>Vous pouvez à tout moment prolonger votre abonnement en suivant les indications ci-dessous :", infosNbDays: "Votre abonnement est encore valable <b>pendant NB_DAYS jours</b>.<br>Vous pouvez à tout moment prolonger votre abonnement en suivant les indications ci-dessous :",
infosExpirated: "Votre abonnement a expiré, mais il vous reste encore quelques jours avant que votre compte et vos données ne soient complètement supprimées.<br>Pour ce faire, suivez sans tarder les indications ci-dessous :", infosExpirated: "Votre abonnement a expiré, mais il vous reste encore quelques jours avant que votre compte et vos données ne soient complètement supprimées.<br>Pour ce faire, suivez sans tarder les indications ci-dessous :",
infosNbDaysAdmin: "Cet abonnement est encore valable <b>pendant NB_DAYS jours</b>.", infosNbDaysAdmin: "Cet abonnement est encore valable <b>pendant NB_DAYS jours</b>.",
infosExpiratedAdmin: "Cet abonnement a expiré.", infosExpiratedAdmin: "Cet abonnement a expiré.",
isNotValided : "Cet utilisateur n'a pas encore validé son compte.<br>Vous pouvez le faire à sa place <a href='#validationOk'>en cochant la case indiquée</a> et enregistrant.", isNotValided : "Cet utilisateur n'a pas encore validé son compte.<br>Vous pouvez le faire à sa place <a href='#validationOk'>en cochant la case indiquée</a> et enregistrant.",
infosPaymentsAdmin : "DATE_PAYMENT : paiement de AMOUNT € au nom de CLIENT_NAME.", infosPaymentsAdmin : "DATE_PAYMENT : paiement de AMOUNT € au nom de CLIENT_NAME.",
}; };