From cb902493018ff083bbff07d2fe4fbad687cc9b73 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Tue, 29 Mar 2022 00:50:50 +0200 Subject: [PATCH] rename function, add parameter for optinType, sort by updatedAt DESC --- backend/src/graphql/resolver/AdminResolver.ts | 9 ++++----- backend/src/graphql/resolver/UserResolver.ts | 14 ++++++++------ 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/backend/src/graphql/resolver/AdminResolver.ts b/backend/src/graphql/resolver/AdminResolver.ts index 061c485c5..7f966b275 100644 --- a/backend/src/graphql/resolver/AdminResolver.ts +++ b/backend/src/graphql/resolver/AdminResolver.ts @@ -34,7 +34,7 @@ import { Decay } from '@model/Decay' import Paginated from '@arg/Paginated' import { Order } from '@enum/Order' import { communityUser } from '@/util/communityUser' -import { checkExistingOptInCode, activationLink } from './UserResolver' +import { checkOptInCode, activationLink } from './UserResolver' import { sendAccountActivationEmail } from '@/mailer/sendAccountActivationEmail' // const EMAIL_OPT_IN_REGISTER = 1 @@ -380,12 +380,11 @@ export class AdminResolver { // can be both types: REGISTER and RESET_PASSWORD let optInCode = await LoginEmailOptIn.findOne({ - userId: user.id, + where: { userId: user.id }, + order: { updatedAt: 'DESC' }, }) - optInCode = checkExistingOptInCode(optInCode, user.id) - // keep the optin type (when newly created is is REGISTER) - await LoginEmailOptIn.save(optInCode) + optInCode = await checkOptInCode(optInCode, user.id) // eslint-disable-next-line @typescript-eslint/no-unused-vars const emailSent = await sendAccountActivationEmail({ diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 7d465c213..81ca42d5c 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -158,10 +158,11 @@ const newEmailOptIn = (userId: number): LoginEmailOptIn => { // needed by AdminResolver // checks if given code exists and can be resent // if optIn does not exits, it is created -export const checkExistingOptInCode = ( +export const checkOptInCode = async ( optInCode: LoginEmailOptIn | undefined, userId: number, -): LoginEmailOptIn => { + optInType: OptInType = OptInType.EMAIL_OPT_IN_REGISTER, +): Promise => { if (optInCode) { if (!canResendOptIn(optInCode)) { throw new Error( @@ -175,6 +176,10 @@ export const checkExistingOptInCode = ( } else { optInCode = newEmailOptIn(userId) } + optInCode.emailOptInTypeId = optInType + await LoginEmailOptIn.save(optInCode).catch(() => { + throw new Error('Unable to save optin code.') + }) return optInCode } @@ -395,10 +400,7 @@ export class UserResolver { userId: user.id, }) - optInCode = checkExistingOptInCode(optInCode, user.id) - // now it is RESET_PASSWORD - optInCode.emailOptInTypeId = OptInType.EMAIL_OPT_IN_RESET_PASSWORD - await LoginEmailOptIn.save(optInCode) + optInCode = await checkOptInCode(optInCode, user.id, OptInType.EMAIL_OPT_IN_RESET_PASSWORD) // eslint-disable-next-line @typescript-eslint/no-unused-vars const emailSent = await sendResetPasswordEmail({