developer239/node-type-orm-graphql

View on GitHub
src/modules/Auth/resolvers/Session/Login.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { Resolver, Mutation, Arg } from 'type-graphql'
import { crypto } from '~/modules/Auth/services/crypto'
import { Session } from '~/modules/Auth/entities/Session'
import { findUserByEmail } from '~/modules/Auth/loaders/user'
import { unauthorizedError } from '~/modules/Core/errors'

@Resolver()
export class LoginResolver {
  @Mutation(() => Session)
  async login(@Arg('email') email: string, @Arg('password') password: string): Promise<Session> {
    const user = await findUserByEmail(email)

    if (!user) {
      throw unauthorizedError({
        email,
        password,
      })
    }

    const valid = await crypto.comparePasswords(password, user.password)

    if (!valid) {
      throw unauthorizedError({
        email,
        password,
      })
    }

    return new Session(user)
  }
}