user-entity.resolver.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import { Parent, ResolveField, Resolver } from '@nestjs/graphql';
  2. import { AuthenticationMethod as AuthenticationMethodType } from '@vendure/common/lib/generated-types';
  3. import { NATIVE_AUTH_STRATEGY_NAME } from '../../../config/auth/native-authentication-strategy';
  4. import { AuthenticationMethod } from '../../../entity/authentication-method/authentication-method.entity';
  5. import { ExternalAuthenticationMethod } from '../../../entity/authentication-method/external-authentication-method.entity';
  6. import { User } from '../../../entity/user/user.entity';
  7. import { UserService } from '../../../service/services/user.service';
  8. import { RequestContext } from '../../common/request-context';
  9. import { Ctx } from '../../decorators/request-context.decorator';
  10. @Resolver('User')
  11. export class UserEntityResolver {
  12. constructor(private userService: UserService) {}
  13. @ResolveField()
  14. async authenticationMethods(
  15. @Ctx() ctx: RequestContext,
  16. @Parent() user: User,
  17. ): Promise<AuthenticationMethodType[]> {
  18. let methodEntities: AuthenticationMethod[] = [];
  19. if (user.authenticationMethods) {
  20. methodEntities = user.authenticationMethods;
  21. }
  22. methodEntities = await this.userService
  23. .getUserById(ctx, user.id)
  24. .then(u => u?.authenticationMethods ?? []);
  25. return methodEntities.map(m => ({
  26. ...m,
  27. id: m.id.toString(),
  28. strategy: m instanceof ExternalAuthenticationMethod ? m.strategy : NATIVE_AUTH_STRATEGY_NAME,
  29. }));
  30. }
  31. }