1
resposta

[Dúvida] Ajuda no nestjs

Olá bom dia!

Feliz ano novo para todos!!

Estou estudando o NestJs com o Prisma, criando um sistema para autenticação, mas estou com um dificuldade aqui, alguém poderia me ajuda??

Esse é meu service

import { Injectable, NotFoundException } from '@nestjs/common';
import { CreateUserDto } from './dto/create-user.dto';
import * as bcrypt from 'bcrypt';
import { PrismaService } from '../prisma/prisma.service';

@Injectable()
export class UserService {
  constructor(private readonly prisma: PrismaService) {}

  async create(createUserDto: CreateUserDto) {
    const data = {
      ...createUserDto,
      password: await bcrypt.hash(createUserDto.password, 10),
    };

    const emailExists = await this.prisma.user.findFirst({
      where: {
        email: data.email,
      },
    });

    if (emailExists) {
      throw new Error('Email/user already exists');
    }

    const createdUser = await this.prisma.user.create({ data });

    return {
      data: {
        ...createdUser,
        password: undefined,
      },
    };
  }

  async findByEmail(email: string) {
    const user = await this.prisma.user.findFirst({
      select: {
        name: true,
        email: true,
      },
      where: { email },
    });

    if (user) {
      throw new NotFoundException();
    }

    if (user.email !== email) {
      throw new NotFoundException('Email not found');
    }

    return {
      data: {
        user,
      },
    };
  }
}

Esse é meu controller

import { Controller, Post, Body, Get, Query } from '@nestjs/common';
import { UserService } from './user.service';
import { CreateUserDto } from './dto/create-user.dto';
import { ApiTags } from '@nestjs/swagger';

@ApiTags('user')
@Controller('user')
export class UserController {
  constructor(private readonly userService: UserService) {}

  @Post()
  create(@Body() createUserDto: CreateUserDto) {
    return this.userService.create(createUserDto);
  }

  @Get()
  async findByEmail(@Query('email') email: string) {
    return this.userService.findByEmail('email');
  }
}

Esse e meuschema.prisma

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model User {
  id        String @id @default(uuid())
  name      String?
  email     String @unique
  password  String

  createdAt DateTime @default(now()) @map("created_at")
  updatedAt DateTime @default(now()) @map("updated_at")

  @@map("user")
}

Quero poder criar um endpoint do tipo GET, que retorne um usuário pelo o email cadastrado.

Mas não estou conseguindo, dar o error

{
    "statusCode": 500,
    "message": "Internal server error"
}

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeAlguém pode me ajuda a resolver esse problema?

1 resposta

Oi, Cristiano! Tudo bem?

Desculpa a demora por um retorno.

Podemos notar que o erro está acontecendo porque você está passando a string 'email' como parâmetro para a função findByEmail no seu controller, ao invés do valor da variável email.

Para corrigir isso, basta alterar a linha 15 do seu UserController para:

return this.userService.findByEmail(email);

Dessa forma, o valor da variável email será passado como parâmetro para a função findByEmail do seu UserService, e o erro deve ser corrigido.

Espero ter ajudado na compreensão do problema. Caso tenha ficado alguma dúvida, sinta-se à vontade em comunicar, estou à disposição!

Um forte abraço e bons estudos!

Caso este post tenha te ajudado, por favor, marcar como solucionado ✓