diff --git a/backend/src/graphql/model/KlickTipp.ts b/backend/src/graphql/model/KlickTipp.ts index 059c7874d..356ed391f 100644 --- a/backend/src/graphql/model/KlickTipp.ts +++ b/backend/src/graphql/model/KlickTipp.ts @@ -1,12 +1,9 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ import { ObjectType, Field } from 'type-graphql' @ObjectType() export class KlickTipp { - constructor(json: any) { - this.newsletterState = json.status === 'Subscribed' + constructor(newsletterState: boolean) { + this.newsletterState = newsletterState } @Field(() => Boolean) diff --git a/backend/src/graphql/resolver/UserResolver.ts b/backend/src/graphql/resolver/UserResolver.ts index 89dde8b7a..9df6b861b 100644 --- a/backend/src/graphql/resolver/UserResolver.ts +++ b/backend/src/graphql/resolver/UserResolver.ts @@ -8,17 +8,7 @@ import { TransactionLink as DbTransactionLink } from '@entity/TransactionLink' import { User as DbUser } from '@entity/User' import { UserContact as DbUserContact } from '@entity/UserContact' import i18n from 'i18n' -import { - Resolver, - Query, - Args, - Arg, - Authorized, - Ctx, - UseMiddleware, - Mutation, - Int, -} from 'type-graphql' +import { Resolver, Query, Args, Arg, Authorized, Ctx, Mutation, Int } from 'type-graphql' import { v4 as uuidv4 } from 'uuid' import { CreateUserArgs } from '@arg/CreateUserArgs' @@ -60,7 +50,6 @@ import { EVENT_ADMIN_USER_DELETE, EVENT_ADMIN_USER_UNDELETE, } from '@/event/Events' -import { klicktippNewsletterStateMiddleware } from '@/middleware/klicktippMiddleware' import { isValidPassword } from '@/password/EncryptorUtils' import { encryptPassword, verifyPassword } from '@/password/PasswordEncryptor' import { Context, getUser, getClientTimezoneOffset } from '@/server/context' @@ -76,6 +65,7 @@ import { randombytes_random } from 'sodium-native' import { FULL_CREATION_AVAILABLE } from './const/const' import { getUserCreations } from './util/creations' import { findUserByIdentifier } from './util/findUserByIdentifier' +import { getKlicktippState } from './util/getKlicktippState' import { validateAlias } from './util/validateAlias' const LANGUAGES = ['de', 'en', 'es', 'fr', 'nl'] @@ -120,7 +110,6 @@ const newGradidoID = async (): Promise => { export class UserResolver { @Authorized([RIGHTS.VERIFY_LOGIN]) @Query(() => User) - @UseMiddleware(klicktippNewsletterStateMiddleware) async verifyLogin(@Ctx() context: Context): Promise { logger.info('verifyLogin...') // TODO refactor and do not have duplicate code with login(see below) @@ -130,12 +119,12 @@ export class UserResolver { user.hasElopage = await this.hasElopage(context) logger.debug(`verifyLogin... successful: ${user.firstName}.${user.lastName}`) + user.klickTipp = await getKlicktippState(userEntity.emailContact.email) return user } @Authorized([RIGHTS.LOGIN]) @Mutation(() => User) - @UseMiddleware(klicktippNewsletterStateMiddleware) async login( @Args() { email, password, publisherId }: UnsecureLoginArgs, @Ctx() context: Context, @@ -181,6 +170,7 @@ export class UserResolver { dbUser.publisherId = publisherId await DbUser.save(dbUser) } + user.klickTipp = await getKlicktippState(dbUser.emailContact.email) context.setHeaders.push({ key: 'token', diff --git a/backend/src/graphql/resolver/util/getKlicktippState.ts b/backend/src/graphql/resolver/util/getKlicktippState.ts new file mode 100644 index 000000000..728f565ff --- /dev/null +++ b/backend/src/graphql/resolver/util/getKlicktippState.ts @@ -0,0 +1,19 @@ +/* eslint-disable @typescript-eslint/no-unsafe-return */ +import { KlickTipp } from '@model/KlickTipp' + +import { getKlickTippUser } from '@/apis/KlicktippController' +import { klickTippLogger as logger } from '@/server/logger' + +export const getKlicktippState = async (email: string): Promise => { + try { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const klickTippUser = await getKlickTippUser(email) + if (klickTippUser) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + return new KlickTipp(klickTippUser.status === 'Subscribed') + } + } catch (err) { + logger.error('There is no klicktipp user for email', email, err) + } + return new KlickTipp(false) +} diff --git a/backend/src/middleware/klicktippMiddleware.ts b/backend/src/middleware/klicktippMiddleware.ts deleted file mode 100644 index 038bd3dd3..000000000 --- a/backend/src/middleware/klicktippMiddleware.ts +++ /dev/null @@ -1,31 +0,0 @@ -/* eslint-disable @typescript-eslint/no-unsafe-return */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ -/* eslint-disable @typescript-eslint/restrict-template-expressions */ -/* eslint-disable @typescript-eslint/no-unsafe-argument */ -import { MiddlewareFn } from 'type-graphql' - -import { KlickTipp } from '@model/KlickTipp' - -import { getKlickTippUser } from '@/apis/KlicktippController' -import { klickTippLogger as logger } from '@/server/logger' - -export const klicktippNewsletterStateMiddleware: MiddlewareFn = async ( - /* eslint-disable-next-line @typescript-eslint/no-unused-vars */ - { root, args, context, info }, - next, -) => { - // eslint-disable-next-line n/callback-return - const result = await next() - let klickTipp = new KlickTipp({ status: 'Unsubscribed' }) - try { - const klickTippUser = await getKlickTippUser(result.email) - if (klickTippUser) { - klickTipp = new KlickTipp(klickTippUser) - } - } catch (err) { - logger.error(`There is no user for (email='${result.email}') ${err}`) - } - result.klickTipp = klickTipp - return result -}