From cda7c235be60eeab4bb16fac389276a4b3bd79a9 Mon Sep 17 00:00:00 2001 From: Jorgenettodev Date: Tue, 3 Dec 2024 04:53:52 -0300 Subject: [PATCH 1/2] Fix typo on deactivate mentor service --- src/modules/mentors/repository/mentor.repository.ts | 6 ++++-- .../mentors/services/deactivateLoggedMentor.service.ts | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/modules/mentors/repository/mentor.repository.ts b/src/modules/mentors/repository/mentor.repository.ts index cb97f7b..0fb4ee2 100644 --- a/src/modules/mentors/repository/mentor.repository.ts +++ b/src/modules/mentors/repository/mentor.repository.ts @@ -16,7 +16,9 @@ export class MentorRepository extends PrismaClient { } async findAllRegisteredMentors(): Promise { - return this.mentors.findMany({where: { registerComplete: true }}).catch(handleError); + return this.mentors + .findMany({ where: { registerComplete: true } }) + .catch(handleError); } async findMentorByEmail(email: string): Promise { @@ -79,7 +81,7 @@ export class MentorRepository extends PrismaClient { return mentors; } - async desativateMentorById(id: string): Promise { + async deactivateMentorById(id: string): Promise { return this.mentors .update({ where: { diff --git a/src/modules/mentors/services/deactivateLoggedMentor.service.ts b/src/modules/mentors/services/deactivateLoggedMentor.service.ts index e005ad2..7f57af6 100644 --- a/src/modules/mentors/services/deactivateLoggedMentor.service.ts +++ b/src/modules/mentors/services/deactivateLoggedMentor.service.ts @@ -6,7 +6,7 @@ export class DesactivateLoggedMentorService { constructor(private mentorRepository: MentorRepository) {} async execute(id: string): Promise<{ message: string }> { - await this.mentorRepository.desativateMentorById(id); + await this.mentorRepository.deactivateMentorById(id); return { message: 'Mentor deactivated successfully' }; } From d6c453e22dba9ae08f301367652707705e828d63 Mon Sep 17 00:00:00 2001 From: Jorgenettodev Date: Tue, 10 Dec 2024 20:01:51 -0300 Subject: [PATCH 2/2] synch changes --- prisma/schema.prisma | 2 +- src/modules/mails/mail.service.ts | 38 ++++ .../firstAccountDeletionReminder.hbs | 211 ++++++++++++++++++ .../services/desactivateLoggedMentor.spec.ts | 6 +- src/modules/mentors/entities/mentor.entity.ts | 2 +- src/modules/mentors/mentor.controller.ts | 8 +- src/modules/mentors/mentor.module.ts | 6 +- .../deactivateLoggedMentor.service.ts | 20 +- 8 files changed, 278 insertions(+), 15 deletions(-) create mode 100644 src/modules/mails/templates/firstAccountDeletionReminder.hbs diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 267d99c..5625ba0 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -4,7 +4,7 @@ generator client { datasource db { provider = "postgresql" - url = env("DATABASE_URL") + url = env("DATABASE_URL_LOCAL") } model mentors { diff --git a/src/modules/mails/mail.service.ts b/src/modules/mails/mail.service.ts index 84cb7c9..cc6c32b 100644 --- a/src/modules/mails/mail.service.ts +++ b/src/modules/mails/mail.service.ts @@ -79,6 +79,44 @@ export class MailService { return; } + /** + * Criar método que envie uma notificação via email informando que a conta será desativada em 30 dias. + * @input mentor: MentorEntity + * @processamento + ** tenta chamar o método this.mailerService.sendMail passando os dados desestruturados do mentor. + * @output + ** email enviado para o mentor || catch (error) console.log(error.message) + */ + + async mentorSendAccountDeletionNotice(mentor: MentorEntity): Promise { + // Desestruturar mentor + const { email, fullName, code } = mentor; + + // url para logar e reativar a conta + const loginUrl = process.env.LOGIN_URL; + // TODO: SOLICITAR A URL PARA LOGIN + + try { + await this.mailerService.sendMail({ + to: email, + subject: 'Conta em processo de exclusão - SouJunior', + template: './firstAccountDeletionReminder', + context: { + name: fullName, + loginUrl, + // Para testar, irei deixar a hora de exclusão daqui a 1 hora. + deletionDate: new Date( + Date.now() + 1 * 60 * 1000, // 1 minuto (para fins de testes) + ).toLocaleDateString('pt-BR'), + }, + }); + } catch (error) { + console.log(error.message); + } + + return; + } + async userSendEmailConfirmation(user: UserEntity): Promise { const { email, fullName, code } = user; const url = `${process.env.URL_CONFIRM_EMAIL}?code=${code}&email=${email}`; diff --git a/src/modules/mails/templates/firstAccountDeletionReminder.hbs b/src/modules/mails/templates/firstAccountDeletionReminder.hbs new file mode 100644 index 0000000..5329c82 --- /dev/null +++ b/src/modules/mails/templates/firstAccountDeletionReminder.hbs @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+

+ Pedido de exclusão enviado +

+
+

+ Sua conta foi desativada e será removida em breve +

+
+ Imagem ilustrativa de um robô +
+

+ Sua conta para mentor(a) da SouJunior recebeu um pedido de exclusão. A partir de agora, seu + perfil não ficará visível para agendamentos de mentorias. +

+
+

+ Lembrando que essa ação ainda não é definitiva. Você terá 30 dias para reconsiderar sua + saída da SouJunior. Caso deseje reativar, faça o login novamente. +

+
+

+ Após esse período, não será possível recuperar sua conta. +

+
+ + + + +
+ + Realizar login e reativar conta + +
+
+ +
+ +
+
+ + + \ No newline at end of file diff --git a/src/modules/mentors/__tests__/services/desactivateLoggedMentor.spec.ts b/src/modules/mentors/__tests__/services/desactivateLoggedMentor.spec.ts index af68307..4646713 100644 --- a/src/modules/mentors/__tests__/services/desactivateLoggedMentor.spec.ts +++ b/src/modules/mentors/__tests__/services/desactivateLoggedMentor.spec.ts @@ -1,6 +1,4 @@ import { Test, TestingModule } from '@nestjs/testing'; -import { DesactivateLoggedMentorService } from '../../services/deactivateLoggedMentor.service'; +import { DeactivateLoggedMentorService } from '../../services/deactivateLoggedMentor.service'; -describe('Desactivate Logged Mentor Tests', () => { - -}); \ No newline at end of file +describe('Desactivate Logged Mentor Tests', () => {}); diff --git a/src/modules/mentors/entities/mentor.entity.ts b/src/modules/mentors/entities/mentor.entity.ts index 0e34425..375af38 100644 --- a/src/modules/mentors/entities/mentor.entity.ts +++ b/src/modules/mentors/entities/mentor.entity.ts @@ -17,4 +17,4 @@ export class MentorEntity { createdAt?: string | Date; updatedAt?: string | Date; deleted?: boolean; -} \ No newline at end of file +} diff --git a/src/modules/mentors/mentor.controller.ts b/src/modules/mentors/mentor.controller.ts index 4e2b047..82b1083 100644 --- a/src/modules/mentors/mentor.controller.ts +++ b/src/modules/mentors/mentor.controller.ts @@ -36,7 +36,7 @@ import { MentorChangePassDto } from './dtos/mentor-change-pass.dto'; import { ActivateMentorService } from './services/activateMentor.service'; import { ChangeMentorPasswordService } from './services/changeMentorPassword.service'; import { CreateMentorService } from './services/createMentor.service'; -import { DesactivateLoggedMentorService } from './services/deactivateLoggedMentor.service'; +import { DeactivateLoggedMentorService } from './services/deactivateLoggedMentor.service'; import { GetMentorByIdService } from './services/getMentorById.service'; import { GetMentorByNameAndRoleService } from './services/getMentorByNameAndRole.service'; import { ListAllMentorsService } from './services/listAllMentors.service'; @@ -57,7 +57,7 @@ export class MentorController { private activateMentorService: ActivateMentorService, private changeMentorPasswordService: ChangeMentorPasswordService, private createMentorService: CreateMentorService, - private deactivateLoggedMentorService: DesactivateLoggedMentorService, + private deactivateLoggedMentorService: DeactivateLoggedMentorService, private getMentorByIdService: GetMentorByIdService, private getMentorByNameAndRoleService: GetMentorByNameAndRoleService, private listAllMentorsService: ListAllMentorsService, @@ -66,7 +66,7 @@ export class MentorController { private updateMentorService: UpdateMentorService, private uploadProfileImageService: UploadProfileImageService, private finishMentorRegisterService: FinishMentorRegisterService, - private getRegisteredMentorsService: ListAllRegisteredMentorsService + private getRegisteredMentorsService: ListAllRegisteredMentorsService, ) {} @Post() @@ -166,7 +166,7 @@ export class MentorController { @ApiExcludeEndpoint() @Patch(':id') - async desactivateLoggedEntity(@Param() { id }: GetByIdDto) { + async deactivateLoggedEntity(@Param() { id }: GetByIdDto) { return this.deactivateLoggedMentorService.execute(id); } diff --git a/src/modules/mentors/mentor.module.ts b/src/modules/mentors/mentor.module.ts index b065766..993441a 100644 --- a/src/modules/mentors/mentor.module.ts +++ b/src/modules/mentors/mentor.module.ts @@ -12,7 +12,7 @@ import { GetMentorByIdService } from './services/getMentorById.service'; import { GetMentorByNameAndRoleService } from './services/getMentorByNameAndRole.service'; import { ActivateMentorService } from './services/activateMentor.service'; import { ChangeMentorPasswordService } from './services/changeMentorPassword.service'; -import { DesactivateLoggedMentorService } from './services/deactivateLoggedMentor.service'; +import { DeactivateLoggedMentorService } from './services/deactivateLoggedMentor.service'; import { FinishMentorRegisterService } from './services/finishMentorRegisterService.service'; import { RedefineMentorPasswordService } from './services/redefineMentorPassword.service'; import { SendRestorationEmailService } from './services/sendRestorationEmail.service'; @@ -32,7 +32,7 @@ import { ListAllRegisteredMentorsService } from './services/listAllRegisteredMen GetMentorByNameAndRoleService, ActivateMentorService, ChangeMentorPasswordService, - DesactivateLoggedMentorService, + DeactivateLoggedMentorService, FinishMentorRegisterService, RedefineMentorPasswordService, SendRestorationEmailService, @@ -40,7 +40,7 @@ import { ListAllRegisteredMentorsService } from './services/listAllRegisteredMen MentorRepository, GenerateCodeUtil, FileUploadService, - JwtService + JwtService, ], exports: [MentorRepository], }) diff --git a/src/modules/mentors/services/deactivateLoggedMentor.service.ts b/src/modules/mentors/services/deactivateLoggedMentor.service.ts index 7f57af6..81374cd 100644 --- a/src/modules/mentors/services/deactivateLoggedMentor.service.ts +++ b/src/modules/mentors/services/deactivateLoggedMentor.service.ts @@ -1,11 +1,27 @@ +import { MailService } from 'src/modules/mails/mail.service'; import { MentorRepository } from '../repository/mentor.repository'; import { Injectable } from '@nestjs/common'; @Injectable() -export class DesactivateLoggedMentorService { - constructor(private mentorRepository: MentorRepository) {} +export class DeactivateLoggedMentorService { + constructor( + private mentorRepository: MentorRepository, + private mailService: MailService, + ) {} async execute(id: string): Promise<{ message: string }> { + const mentor = await this.mentorRepository.findMentorById(id); + + if (!mentor) { + throw new Error('Mentor not found'); + } + + await this.mailService.mentorSendAccountDeletionNotice({ + ...mentor, + password: '', + role: 'mentor', + }); + await this.mentorRepository.deactivateMentorById(id); return { message: 'Mentor deactivated successfully' };