Skip to content

Latest commit

 

History

History

backend

Code Challenge ProUnion #2 - Backend

Sistema de Gerenciamento de Usuários

Status GitHub Issues GitHub Pull Requests License


Tabela de Conteúdos

Sobre

A API segue as orientações básicas do desafio. Procurei seguir as orientações do ExpressJS tanto na parte de segurança quanto na parte do deploy. Isso se traduziu em Rate Limiting global e específico para rota de autenticação, Logs espalhados pela aplicação, Error Handling generalizado e outros ajustes menores.

Para além disso, fiz um simples sistema de acesso onde apenas usuários com acesso de ADMIN conseguem criar,editar e remover usuários, validação em camadas anteriores à da regras de negócio.

A rota de listagem dos usuários (GET /users) retorna os dados "paginados", sendo possível verificar tais dados a partir dos headers X-Total-Count (número total de items, no caso tarefas) e X-Total-Pages.

A estratégia de autenticação foi o uso de JWT, as chaves são geradas automaticamente caso nenhuma seja passada via variáveis de ambiente. É possível configurar o tipo de algoritmo utilizado no arquivo src/config/index.ts.

A organização da API foi inspirada nos projetos do NestJS onde existe módulo, controlador e serviço. As rotas são facilmente encontradas e o sufixo de muitos arquivos facilita a compreensão da função de cada um deles.

Comentei pouco pois tentei fazer o código o mais explícito o possível, certas partes vale o conhecimento da biblioteca em uso para uma compreensão melhor do que está sendo feito

Requisitos

Uso

  • Primeiro clone o projeto: git clone https://github.com/RenanGalvao/code-challenge-prounion-2.git
  • Acesse a pasta clonada code-challenge-prounion-2

Desenvolvimento

  • Navegue até a pasta backend
  • Crie uma cópia do arquivo .env.example com o nome de .env
  • Instale os pacotes necessários npm install
  • Suba o servidor npm run dev
  • URL de acesso: http://localhost:3000
  • Usuário: [email protected]
  • Senha: 12345678

Produção

Inicie o projeto a partir do docker-compose.yml da pasta raiz.

Rotas

  • POST /auth/sign-in retorna dados sobre o usuário e token de autenticação, espera um JSON com as chaves: email e password.
  • GET /users retorna a lista de usuários cadastrados, aceita parâmetros de pesquisa page e itemsPerPage, sendo ambos valores númericos.
  • GET /users/:id retorna dados do usuário associado ao id.
  • POST /users cria um novo usuário e retorna seus dados, espera um JSON com as chaves: name, email, password e role (sendo o valor "USER" ou "ADMIN").
  • PUT /users/:id atualiza e retorna seus os dados do usuário associado ao id, o JSON esperado contém as mesmas chaves que o da criação, no entanto todos os campos são opcionais.
  • DELETE /users/:id remove o usuário associado ao id.
  • GET /health utilizada para verificar a saúde da API, retorna o uptime da aplicação.

Principais Tecnologias

Autor

@RenanGalvao