Ajout possibilité abonnements non limités dans le tempst
This commit is contained in:
parent
a078795178
commit
c63e3b2702
@ -26,7 +26,7 @@ module.exports =
|
|||||||
tokenLoginChangingTimeInHours: "1h",// for email & password changing
|
tokenLoginChangingTimeInHours: "1h",// for email & password changing
|
||||||
tokenDeleteUserTimeInHours: "1h",
|
tokenDeleteUserTimeInHours: "1h",
|
||||||
tokenUnsubscribeLinkTimeInDays: "7 days", // token send with subscription's emails
|
tokenUnsubscribeLinkTimeInDays: "7 days", // token send with subscription's emails
|
||||||
freeAccountTimingInDays: 15,
|
freeAccountTimingInDays: 15,// if 0 = unlimited
|
||||||
freeAccountExpirationNotificationInDays: 3,
|
freeAccountExpirationNotificationInDays: 3,
|
||||||
accountExpirationFirstNotificationInDays: 10,
|
accountExpirationFirstNotificationInDays: 10,
|
||||||
accountExpirationSecondNotificationInDays: 3,
|
accountExpirationSecondNotificationInDays: 3,
|
||||||
|
@ -95,6 +95,7 @@ exports.getQuestionnairesForUser = async(req, res, next) =>
|
|||||||
// CRONS
|
// CRONS
|
||||||
|
|
||||||
// Envoi des notifications aux abonnés arrivés à quelques jours de la fin de leur période d'abonnement gratuit.
|
// Envoi des notifications aux abonnés arrivés à quelques jours de la fin de leur période d'abonnement gratuit.
|
||||||
|
// À ne pas appeler si abonnement non limité dans le temps
|
||||||
exports.notifyExpirationFreeAccount= async(req, res, next) =>
|
exports.notifyExpirationFreeAccount= async(req, res, next) =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -156,6 +157,7 @@ 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.
|
// Envoi des notifications aux abonnés arrivés à quelques jours de la fin de leur période d'abonnement prémium.
|
||||||
|
// À ne pas appeler si abonnement non limité dans le temps
|
||||||
exports.notifyExpirationAccount= async(req, res, next) =>
|
exports.notifyExpirationAccount= async(req, res, next) =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -238,17 +240,17 @@ exports.addNewQuestionnaireUsers = async(req, res, next) =>
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
console.log("Je cherche les abonnements à traiter");
|
console.log("Je cherche les abonnements à traiter");// pour vérifier si cronjob ok
|
||||||
const db = require("../models/index");
|
const db = require("../models/index");
|
||||||
// Utilisateurs dont l'abonnement est toujours actif et souhaitant recevoir des quizs le jour de la semaine en cours.
|
// Utilisateurs dont l'abonnement est toujours actif et souhaitant recevoir des quizs le jour de la semaine en cours.
|
||||||
// Le tout en heure locale et en ignorant ceux qui ont déjà été traités durant les dernières 24H.
|
// Le tout en heure locale et en ignorant ceux qui ont déjà été traités durant les dernières 24H.
|
||||||
const subscriptionsOk = await db.sequelize.query("SELECT `Subscriptions`.`id` as SubscriptionId, `Subscriptions`.`lastProcessingAt`, `UserId`, `name`, `email`, `smtp`, `language`, `receiptDays`, ADDDATE(UTC_TIMESTAMP, INTERVAL `timeDifference` MINUTE) AS localDate FROM `Subscriptions` INNER JOIN `Users` ON `Subscriptions`.`UserId`=`Users`.`id` WHERE `status`='user' AND ADDDATE(`Subscriptions`.`createdAt`, `numberOfDays`) > UTC_TIMESTAMP HAVING HOUR(localDate) > "+config.hourGiveNewQuestionnaireBegin+" AND HOUR(localDate) < "+config.hourGiveNewQuestionnaireEnd+" AND LOCATE(DAYOFWEEK(localDate),receiptDays)!=0 AND SubscriptionId NOT IN (SELECT DISTINCT `SubscriptionId` FROM `Pauses` WHERE ADDDATE(`startingAt`, INTERVAL `timeDifference` MINUTE) <= localDate AND ADDDATE(`endingAT`, INTERVAL `timeDifference` MINUTE) > localDate) AND DATEDIFF(NOW(),`Subscriptions`.`lastProcessingAt`) >= 1 LIMIT "+config.maxQuestionnaireSendedAtSameTime, { type: QueryTypes.SELECT });
|
const subscriptionsOk = await db.sequelize.query("SELECT `Subscriptions`.`id` as SubscriptionId, `Subscriptions`.`lastProcessingAt`, `UserId`, `name`, `email`, `smtp`, `language`, `receiptDays`, ADDDATE(UTC_TIMESTAMP, INTERVAL `timeDifference` MINUTE) AS localDate FROM `Subscriptions` INNER JOIN `Users` ON `Subscriptions`.`UserId`=`Users`.`id` WHERE `status`='user' AND ((ADDDATE(`Subscriptions`.`createdAt`, `numberOfDays`) > UTC_TIMESTAMP) OR `numberOfDays`=0) HAVING HOUR(localDate) > "+config.hourGiveNewQuestionnaireBegin+" AND HOUR(localDate) < "+config.hourGiveNewQuestionnaireEnd+" AND LOCATE(DAYOFWEEK(localDate),receiptDays)!=0 AND SubscriptionId NOT IN (SELECT DISTINCT `SubscriptionId` FROM `Pauses` WHERE ADDDATE(`startingAt`, INTERVAL `timeDifference` MINUTE) <= localDate AND ADDDATE(`endingAT`, INTERVAL `timeDifference` MINUTE) > localDate) AND DATEDIFF(NOW(),`Subscriptions`.`lastProcessingAt`) >= 1 LIMIT "+config.maxQuestionnaireSendedAtSameTime, { type: QueryTypes.SELECT });
|
||||||
if(subscriptionsOk.length === 0)
|
if(subscriptionsOk.length === 0)
|
||||||
res.status(200).json({ message: txt.allSubscriptionProcessed });
|
res.status(200).json({ message: txt.allSubscriptionProcessed });
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const now=new Date();
|
const now=new Date();
|
||||||
console.log("Je vais traiter "+subscriptionsOk.length+" abonnements - "+now);
|
console.log("Je m'en vais traiter "+subscriptionsOk.length+" abonnements - "+now);
|
||||||
for (let i in subscriptionsOk)
|
for (let i in subscriptionsOk)
|
||||||
{
|
{
|
||||||
// On commence à chercher le dernier élément envoyé à l'utilisateur pour comparer sa date d'enregistrement à celle du dernier envoi
|
// On commence à chercher le dernier élément envoyé à l'utilisateur pour comparer sa date d'enregistrement à celle du dernier envoi
|
||||||
@ -287,8 +289,6 @@ exports.addNewQuestionnaireUsers = async(req, res, next) =>
|
|||||||
}
|
}
|
||||||
// Token du lien de désinscription aux envois :
|
// Token du lien de désinscription aux envois :
|
||||||
const token=jwt.sign({ userId: subscriptionsOk[i].UserId }, config.tokenPrivateKey, { expiresIn: config.tokenUnsubscribeLinkTimeInDays });
|
const token=jwt.sign({ userId: subscriptionsOk[i].UserId }, config.tokenPrivateKey, { expiresIn: config.tokenUnsubscribeLinkTimeInDays });
|
||||||
|
|
||||||
elementToSend="";
|
|
||||||
if(!tool.isEmpty(elementToSend))
|
if(!tool.isEmpty(elementToSend))
|
||||||
{
|
{
|
||||||
if(elementToSend.Questionnaire !== undefined)// = Il s'agit de l'élément d'un group
|
if(elementToSend.Questionnaire !== undefined)// = Il s'agit de l'élément d'un group
|
||||||
@ -336,9 +336,9 @@ exports.addNewQuestionnaireUsers = async(req, res, next) =>
|
|||||||
toolMail.sendMail(subscriptionsOk[i].smtp, subscriptionsOk[i].email, mailDatas.mailSubject, tool.replaceAll(txt.mailNewQuestionnaireBodyTxt, mapMail), "", mailDatas);
|
toolMail.sendMail(subscriptionsOk[i].smtp, subscriptionsOk[i].email, mailDatas.mailSubject, tool.replaceAll(txt.mailNewQuestionnaireBodyTxt, mapMail), "", mailDatas);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else if(config.freeAccountTimingInDays !== 0)
|
||||||
{
|
{
|
||||||
// L'utilisateur a déjà reçu tous les élements publiés. Dans ce cas, on tire au hasard un quiz groupé pour le lui envoyer une nouvelle fois.
|
// Il s'agit d'un abonnement payant et l'utilisateur a déjà reçu tous les élements publiés. Dans ce cas, on tire au hasard un quiz groupé pour le lui envoyer une nouvelle fois.
|
||||||
const getElementToSend = await db.sequelize.query("SELECT `id`, `title`, `slug` FROM `Groups` WHERE `publishingAt` < NOW() AND `language`='"+subscriptionsOk[i].language+"' ORDER BY RAND() LIMIT 1", { type: QueryTypes.SELECT });
|
const getElementToSend = await db.sequelize.query("SELECT `id`, `title`, `slug` FROM `Groups` WHERE `publishingAt` < NOW() AND `language`='"+subscriptionsOk[i].language+"' ORDER BY RAND() LIMIT 1", { type: QueryTypes.SELECT });
|
||||||
const mapMail =
|
const mapMail =
|
||||||
{
|
{
|
||||||
@ -359,7 +359,7 @@ exports.addNewQuestionnaireUsers = async(req, res, next) =>
|
|||||||
}
|
}
|
||||||
toolMail.sendMail(subscriptionsOk[i].smtp, subscriptionsOk[i].email, mailDatas.mailSubject, tool.replaceAll(txtQuestionnaireAccess.questionnaireRetryInfoTxt, mapMail), "", mailDatas);
|
toolMail.sendMail(subscriptionsOk[i].smtp, subscriptionsOk[i].email, mailDatas.mailSubject, tool.replaceAll(txtQuestionnaireAccess.questionnaireRetryInfoTxt, mapMail), "", mailDatas);
|
||||||
}
|
}
|
||||||
// Dans tout les cas, on enregistre le fait que l'abonnement a été traité :
|
// Dans tous les cas, on enregistre le fait que l'abonnement a été traité :
|
||||||
db["Subscription"].update({ lastProcessingAt: now }, { where: { id : subscriptionsOk[i].SubscriptionId }, limit:1 });
|
db["Subscription"].update({ lastProcessingAt: now }, { where: { id : subscriptionsOk[i].SubscriptionId }, limit:1 });
|
||||||
}
|
}
|
||||||
res.status(200).json(subscriptionsOk);
|
res.status(200).json(subscriptionsOk);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user