diff --git a/src/configuration/config.ts b/src/configuration/config.ts index 6f8c73a6f608ff4d78f2ccb5a0e5bf40f1db8e87..fd2dfa51b39985c422a0d5649b7014bcdb9c2f10 100644 --- a/src/configuration/config.ts +++ b/src/configuration/config.ts @@ -97,5 +97,17 @@ export const config = { ejs: 'verify.ejs', json: 'verify.json', }, + inactiveUser1: { + ejs: 'inactiveUser1.ejs', + json: 'inactiveUser1.json', + }, + inactiveUser2: { + ejs: 'inactiveUser2.ejs', + json: 'inactiveUser2.json', + }, + inactiveUser3: { + ejs: 'inactiveUser3.ejs', + json: 'inactiveUser3.json', + }, }, }; diff --git a/src/mailer/mail-templates/inactiveUser1.ejs b/src/mailer/mail-templates/inactiveUser1.ejs new file mode 100644 index 0000000000000000000000000000000000000000..4efe15e4795502bb34e7ed1ae9a09103c5999972 --- /dev/null +++ b/src/mailer/mail-templates/inactiveUser1.ejs @@ -0,0 +1,6 @@ +Bonjour,<br /> +<br /> +Nous avons constaté que vous ne vous êtes pas connecté à la plateforme Rés'in depuis plus de 6 mois. Afin de nous assurer que les informations sur la plateforme sont bien à jour, nous procéderons à la suppression de votre compte en l'absence d'activité de votre part. +Si cela est une erreur de notre part, merci de vous connecter afin de maintenir votre compte actif. + +Cordialement, diff --git a/src/mailer/mail-templates/inactiveUser1.json b/src/mailer/mail-templates/inactiveUser1.json new file mode 100644 index 0000000000000000000000000000000000000000..5070d18d9531b8e684a5cf19494bd439cf0e9b46 --- /dev/null +++ b/src/mailer/mail-templates/inactiveUser1.json @@ -0,0 +1,3 @@ +{ + "subject": "Compte inactif depuis 6 mois, suppression dans 2 mois" +} diff --git a/src/mailer/mail-templates/inactiveUser2.ejs b/src/mailer/mail-templates/inactiveUser2.ejs new file mode 100644 index 0000000000000000000000000000000000000000..1178beb68211408fc1a53879be8e14d6ee9c34c3 --- /dev/null +++ b/src/mailer/mail-templates/inactiveUser2.ejs @@ -0,0 +1,6 @@ +Bonjour,<br /> +<br /> +Malgré notre dernier message, vous ne vous êtes toujours pas reconnecté(e) à la plateforme Rés'in. Sans action de votre part, votre compte sera donc supprimé sous 15 jours. +Merci de vous connecter si vous souhaitez le conserver. + +Cordialement, \ No newline at end of file diff --git a/src/mailer/mail-templates/inactiveUser2.json b/src/mailer/mail-templates/inactiveUser2.json new file mode 100644 index 0000000000000000000000000000000000000000..51b79973253bed57940aea014e71426065c46601 --- /dev/null +++ b/src/mailer/mail-templates/inactiveUser2.json @@ -0,0 +1,3 @@ +{ + "subject": "Compte inactif depuis 7 mois, suppression dans 1 mois" +} diff --git a/src/mailer/mail-templates/inactiveUser3.ejs b/src/mailer/mail-templates/inactiveUser3.ejs new file mode 100644 index 0000000000000000000000000000000000000000..59c182fb803abce4b7699044dafc7f9cc1ae3191 --- /dev/null +++ b/src/mailer/mail-templates/inactiveUser3.ejs @@ -0,0 +1,6 @@ +Bonjour,<br /> +<br /> +Votre compte sur la plateforme Rés'in a été supprimé en raison d’une absence de connexion prolongée. Si cela est une erreur ou si vous souhaitez réintégrer le réseau, vous avez la possibilité de recréer un compte à tout moment. +Pour toute question ou assistance, n’hésitez pas à nous contacter. + +Cordialement, diff --git a/src/mailer/mail-templates/inactiveUser3.json b/src/mailer/mail-templates/inactiveUser3.json new file mode 100644 index 0000000000000000000000000000000000000000..4ec3996803678890c1485edaef7b640b5e984547 --- /dev/null +++ b/src/mailer/mail-templates/inactiveUser3.json @@ -0,0 +1,3 @@ +{ + "subject": "Suppression de votre compte Rés'In" +} diff --git a/src/users/services/users.service.ts b/src/users/services/users.service.ts index 62a9196a03164b8567293a8a0e8bb324ef3bf7c5..d3c3494a24c50ae0e11d8d372c81e737c1a7573d 100644 --- a/src/users/services/users.service.ts +++ b/src/users/services/users.service.ts @@ -34,6 +34,7 @@ import { UserRegistrySearchService } from './userRegistry-search.service'; @Injectable() export class UsersService { private readonly logger = new Logger(UsersService.name); + constructor( @InjectModel(User.name) private userModel: Model<IUser>, private readonly mailerService: MailerService, @@ -95,6 +96,7 @@ export class UsersService { return permalink; } + /** * Verify password strength with the following rule: * - The string must contain at least 1 lowercase alphabetical character @@ -130,6 +132,7 @@ export class UsersService { public findAll(): Promise<User[]> { return this.userModel.find().populate('employer').populate('job').select('-password').exec(); } + public async findPopulatedUserRegistryById(userId: string): Promise<IUserRegistry> { return this.userModel .findOne({ _id: userId }) @@ -1117,4 +1120,43 @@ export class UsersService { } } } + + /** Check if the user didn't connect for 6 months and send an email to warn him, second email after 7 months */ + @Cron(CronExpression.EVERY_DAY_AT_3AM) + public async checkInactiveUsers(): Promise<void> { + this.logger.log('checkInactiveUsers process'); + const users = await this.userModel.find({ emailVerified: true }).exec(); + for (const user of users) { + if (user.lastLoginDate) { + const lastLoginDate = DateTime.fromJSDate(user.lastLoginDate); + const now = DateTime.local(); + const days_diff = Math.floor(now.diff(lastLoginDate, 'days').toObject().days); + if ([180, 210, 240].includes(days_diff)) { + const emailIndex = (days_diff - 180) / 30 + 1; + this.logger.log(`checkInactiveUsers: Sending email ${emailIndex} to ${user.email}`); + await this.sendInactiveUserEmail(user.email, user.name, user.surname, emailIndex); + if (days_diff === 240) { + this.deleteOne(user.email); + } + } + } + } + } + + /*Send an email to the inactive user*/ + public async sendInactiveUserEmail(email: string, name: string, surname: string, emailNumber: number): Promise<void> { + const config = this.mailerService.config; + const templates = [config.templates.inactiveUser1, config.templates.inactiveUser2, config.templates.inactiveUser3]; + const selectedTemplate = templates[emailNumber - 1]; + const ejsPath = this.mailerService.getTemplateLocation(selectedTemplate.ejs); + const jsonConfig = this.mailerService.loadJsonConfig(selectedTemplate.json); + + const html = await ejs.renderFile(ejsPath, { + config, + name: name, + surname: surname, + }); + + this.mailerService.send(email, jsonConfig.subject, html); + } }