Skip to content

azevgabriel/going-2-tech-test

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Teste Técnico - Desenvolvedor Full-Stack

Como rodar o projeto?

Front-end

Pasta: /client

Versão do Node.js: v20.16.0

  1. Acesse o diretório do projeto:
cd client
  1. Utilize o Node.js na versão v20.16.0 ou execute:
nvm use
  1. Rode as depencias do projeto:
npm ci
  1. Inicie o projeto:
npm run dev

Back-end

Pasta: /api

Versão do Node.js: v20.16.0

  1. Acesse o diretório do projeto:
cd api
  1. Utilize o Node.js na versão v20.16.0 ou execute:
nvm use
  1. Rode as depencias do projeto:
npm ci
  1. Configure o .env com base no exemplo fornecido em .env.example
  2. Execute a seed para gerar alguns usuários pré-definidos.
npm run seed
  1. Inicie o projeto:
npm run dev

Logins pós seed

  • Usuário Comum: user@tech.com | 1234
  • Usuário Gerente: manager@tech.com | 1234
  • Usuário Admin: admin@tech.com | 1234

Considerações sobre o código

Front-end

Regras de négocio

  • Criar interface de login e armazenamento do JWT.
  • Criar restrições visuais baseadas no nível de acesso do usuário.
  • Criar formulário de cadastro/edição de usuário com validação.
  • Exibir mensagens de erro quando o usuário tentar acessar recursos sem permissão.
  • Permissões verificadas no front-end.
Tecnologia
  • Next.JS + Tailwind CSS + Context API
  • Fetch API para integração

Back-end

Estrutura de pastas

  $ tree
  .
  ├── src
  │   ├── db
  │   └── modules
  │   └── presentation
  │   └── utils
  │   └── app.module.ts
  │   └── main.ts
  ├──.env.exemple

db: Contém toda a infraestrutura do banco de dados, incluindo migrations, seed e configuração inicial do TypeORM.

modules: Diretório onde os controllers e services estão organizados de forma modular, seguindo suas respectivas responsabilidades.

presentation: Contém utilitários para lidar com as extremidades de uma solicitação HTTP, como requisições (request) e respostas (response).

utils: Centraliza funções utilitárias e constantes importantes do projeto.

Regras de négocio

  • Criar entidade Users com id, name, email, password e role;
  • Implementar
    • CRUD para a tabela Users
  • Testes unitários nos arquivos mais sensíveis.

Critérios Técnicos

Tecnologia
  • Criar um servidor Nest.JS + TypeORM;
  • Utilizar o PostgreSQL como Banco de dados;
  • Utilizar o JWT para autenticação de usuários;
  • Utilizar o CASL para o controle de permissões.
Segurança
  • Utilizar o bcrypt como encriptador de senhas. Ao salvar no Banco;
  • Sistema validado com JWT em rotas privadas. src/modules/auth/auth.guard.ts
    • Usuário não autenticado, retorno do status code 401 (Unauthorized.)
  • Controle de permissões:
    • Usuário não autenticado não acessa rotas privadas. Como: Listagem de Usuários.
    • Usuário comum "type": "user" não tem acesso a listagem de usuários.
    • Usuário gerente "type": "manager" não tem acesso a alteração de cargo role
      • Retorno do status code 403 (Forbidden)
    • Usuário administador tem acesso à tudo.
    • Usuário não pode se cadastrar com um email existente.
      • Retorno do status code 400 (Email already in use)

Comandos relevantes:

Criando migrações com o TypeORM (Caso não utilizar o synchronize)
typeorm migration:create ./[MIGRATION_PATH_DIR]/[MIGRATION_FILE_NAME]

MIGRATION_PATH_DIR: src/db/typeorm/migrations

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors