From da527dd162865f64852753132ced20217e5bf753 Mon Sep 17 00:00:00 2001 From: elweyn Date: Fri, 17 Dec 2021 11:04:12 +0100 Subject: [PATCH] Database logics when resending activation link --- backend/src/graphql/resolver/UserResolver.ts | 29 ++++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 7a9f10bb0..f33c902ce 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -451,6 +451,7 @@ export class UserResolver { /\$1/g, emailOptIn.verificationCode.toString(), ) + const emailSent = await this.sendAccountActivationEmail( activationLink, loginUser.firstName, @@ -474,11 +475,29 @@ export class UserResolver { } private async createEmailOptIn(loginUserId: number, queryRunner: QueryRunner) { - const emailOptIn = new LoginEmailOptIn() - emailOptIn.userId = loginUserId - emailOptIn.verificationCode = random(64) - emailOptIn.emailOptInTypeId = EMAIL_OPT_IN_REGISTER - + const loginEmailOptInRepository = await getRepository(LoginEmailOptIn) + let emailOptIn = await loginEmailOptInRepository.findOne({ + userId: loginUserId, + emailOptInTypeId: EMAIL_OPT_IN_REGISTER, + }) + if (emailOptIn) { + const timeElapsed = Date.now() - new Date(emailOptIn.updatedAt).getTime() + if (timeElapsed <= parseInt(CONFIG.RESEND_TIME.toString()) * 60 * 1000) { + throw new Error( + 'email already sent less than ' + + parseInt(CONFIG.RESEND_TIME.toString()) + + ' minutes ago', + ) + } else { + emailOptIn.updatedAt = new Date() + emailOptIn.resendCount++ + } + } else { + emailOptIn = new LoginEmailOptIn() + emailOptIn.verificationCode = random(64) + emailOptIn.userId = loginUserId + emailOptIn.emailOptInTypeId = EMAIL_OPT_IN_REGISTER + } await queryRunner.manager.save(emailOptIn).catch((error) => { // eslint-disable-next-line no-console console.log('Error while saving emailOptIn', error)