Skip to content

Backend - Desafio Técnico 2 - API RESTful para autenticação de usuários, que permita operações de cadastro (sign up), autenticação (sign in) e recuperação de informações do usuário.

Notifications You must be signed in to change notification settings

Cezarj59/api-nodejs-mongo

Repository files navigation

API Restful em Node.js com Express e MongoDB Atlas.

Node.js Express JWT Mongoose MongoDB Atlas Render Insomnia

Visão Geral

Este projeto é uma API RESTful desenvolvida em Node.js utilizando o framework Express. A API oferece operações de cadastro (sign up), autenticação (sign in), recuperação de informações do usuário e busca de usuário autenticado. Utiliza JSON como formato de comunicação, JWT para autenticação e MongoDB Atlas como banco de dados na nuvem e Mongoose utilizado para mapeamento de dados.

Objetivos

  • Desenvolvimento de uma API RESTful em Node.js com Express
  • Implementação de operações de cadastro, autenticação, recuperação de informações e busca de usuário autenticado
  • Utilização de JSON como formato de comunicação
  • Autenticação com JWT (JSON Web Tokens)
  • Criptografia hash na senha e token para maior segurança
  • Banco de dados MongoDB Atlas na nuvem

Tecnologias Utilizadas

  • Node.js (LTS)
  • Express 4.17.1
  • JWT para autenticação
  • Mongoose (Object Data Modeling para MongoDB)
  • MongoDB Atlas para armazenamento de dados
  • Render para hospedagem
  • Insomnia para testes de API

Como Usar

  1. Clone este repositório (Opcional: Se você estiver interessado em examinar o código-fonte ou contribuir para o projeto).

  2. Configure seu ambiente de desenvolvimento com as tecnologias mencionadas.

  3. Execute a aplicação Node.js. Utilize o seguinte comando no terminal:

    npm start
    # ou
    node src/server.js
  4. Utilize os seguintes endpoints para realizar operações na API:

  • Cadastro de Usuário:

locahost:

[POST] https://localhost:3001/auth/cadastro

ou

[POST] https://api-escribo-x2y3.onrender.com/auth/cadastro
  • Autenticação de Usuário:

locahost:

[POST] https://localhost:3001/auth/login

ou

[POST] https://api-escribo-x2y3.onrender.com/auth/login

-Nota: A busca de usuários autenticados requer autenticação via Bearer Token. Certifique-se de incluir na sua requisição: Bearer TOKEN.

  • Busca de Usuários Autenticados:

locahost:

[GET] https://localhost:3001/admin/users

ou

[GET] https://api-escribo-x2y3.onrender.com/admin/users
  • Atualização de Usuário:

locahost:

[PUT] https://localhost:3001/auth/users/:id

ou

[PUT] https://api-escribo-x2y3.onrender.com/auth/users/:id

Certifique-se de que as tecnologias necessárias estejam configuradas no seu ambiente antes de utilizar os endpoints. Você pode usar ferramentas como o INSOMNIA, cURL ou POSTMAN para realizar as operações na API.

Como Testar os Endpoints

Você pode utilizar o cURL para testar os endpoints diretamente do terminal ou linha de comando. Abaixo estão alguns exemplos básicos:

Cadastro de Usuário

curl -X POST -H "Content-Type: application/json" -d '{"nome":"SeuNome", "email":"[email protected]", "senha":"suasenha", "telefone":{"numero":"seunumero", "ddd":"seuddd"}}' https://api-escribo-x2y3.onrender.com/auth/cadastro

Login

curl -X POST -H "Content-Type: application/json" -d '{"email":"[email protected]", "senha":"suasenha"}' https://api-escribo-x2y3.onrender.com/auth/login

Busca de Usuários Autenticados

curl -X GET -H "Authorization: Bearer TOKEN_AQUI" https://api-escribo-x2y3.onrender.com/admin/users

Atualização de Usuário (Exemplo com ID "seuid")

curl -X PUT -H "Content-Type: application/json" -H "Authorization: Bearer TOKEN_AQUI" -d '{"nome":"NovoNome", "email":"[email protected]", "telefone":{"numero":"novonumero", "ddd":"novoddd"}}' https://api-escribo-x2y3.onrender.com/auth/users/seuid

Endpoints

A seguir estão os endpoints disponíveis do projeto hospedado:

{
  "nome": "string",
  "email": "string",
  "senha": "senha",
  "telefone": {
    "numero": "123456789",
    "ddd": "11"
  }
}
  • Output (sucesso):
    • Retorno com informações do usuário cadastrado
{
  "id": "GUID/ID",
  "data_criacao": "data",
  "data_atualizacao": "data",
  "ultimo_login": "data",
  "token": "GUID/JWT"
}
{
 "email": "string",
 "senha": "senha"
}
  • Output (sucesso):
    • Retorno com token de autenticação
{
"id": "GUID/ID",
"data_criacao": "data",
"data_atualizacao": "data",
"ultimo_login": "data_atualizada",
"token": "GUID/JWT"
}
  • Erros:

    • E-mail não cadastrado ou senha incorreta: { "mensagem": "Usuário e/ou senha inválidos" }
    • Senha incorreta: Status 401 com { "mensagem": "Usuário e/ou senha inválidos" }
  • Buscar Usuários (Admin)

   {
      "id": "6563873da187f9f7405a7026",
      "nome": "string",
      "email": "string",
      "iat": 1701021502,
      "exp": 1701023302
    }
  • Erros:

    • Token inválido: { "mensagem": "Não autorizado" }
    • Token expirado (mais de 30 minutos): { "mensagem": "Sessão inválida" }
  • Atualizar Usuário

{
  "nome": "Novo Nome",
  "email": "[email protected]",
  "telefone": {
    "numero": "987654321",
    "ddd": "11"
  }
}
  • Output (sucesso):
    • Retorno com informações atualizadas do usuário
   {
  "mensagem": "Usuário atualizado com sucesso",
  "id": "ID",
  "data_criacao": "Data",
  "data_atualizacao": "Data_atualizada",
  "ultimo_login": "Data",
  "token": "Token"
}
  • Erros:
    • Email já Cadastrado: { "mensagem": "E-mail já existente" }

Estrutura do Projeto

A estrutura deste projeto segue a organização abaixo:

  • src: Contém o código-fonte Node.js da aplicação.
  • config: Armazena configurações específicas da aplicação.
  • controllers: Responsável por conter os controladores da lógica de negócios.
  • database: Mantém os arquivos relacionados ao banco de dados, como conexões e configurações.
  • middlewares: Contém middlewares utilizados na aplicação.
  • models: Guarda os modelos de dados utilizados na aplicação.
  • server.js: Ponto de entrada da aplicação, contendo as configurações e definição das rotas da API.

Sistema de Build com Gerenciamento de Dependências

O projeto utiliza o npm (Node Package Manager) para:

  • Gerenciamento de Dependências: Todas as dependências do projeto são definidas no arquivo package.json e podem ser instaladas usando o comando:
    npm install
    

Padronização de Código

  • ESLint: O projeto utiliza o ESLint para manter a consistência no estilo do código. Os padrões de estilo são definidos no arquivo .eslintrc.json e a verificação pode ser feita com o comando:
    npm run lint
    
    
    

Languages and Tools:

javascript nodejs express jwt mongoose mongodb npm git eslint ubuntu vscode

About

Backend - Desafio Técnico 2 - API RESTful para autenticação de usuários, que permita operações de cadastro (sign up), autenticação (sign in) e recuperação de informações do usuário.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published