Teste Técnico para Estagiário Fullstack Jack Experts

Getting Started

  1. Primeiro clona o projeto
  2. Instalar as dependencias do projeto rodando o comando a seguir:
  npm run install
  # or
  yarn install
  1. Subir um container docker rodando o comando a seguir:
  npm run infra
  # or
  yarn infra
  1. Subir a servidor API e servidor WEB rodando o comando a seguir:
  npm run dev
  # or
  yarn dev

Requisitos do projeto

Requisitos Funcionais

  • Cadastro de Usuário. O usuário deve ser capaz de se cadastrar com e-mail e senha. Implementar validação básica para e-mail e senha.

  • Autenticação. Implementar login e logout de usuários utilizando JWT (JSON Web Token). Apenas usuários autenticados devem ter acesso às funcionalidades de gerenciamento de tarefas.

  • Gerenciamento de Tarefas. Listar todas as tarefas do usuário autenticado. Adicionar novas tarefas com um título e uma descrição. Marcar tarefas como concluídas. Editar o título e a descrição de uma tarefa. Excluir uma tarefa.

  • Interface de Usuário. A interface deve ser intuitiva e responsiva. Implementar a interface utilizando React. Utilizar hooks do React para gerenciar estado e efeitos colaterais.

Requisitos técnicos

  • Backend com Node.js: Utilizar Express.js ou NestJS para criar uma API RESTful. Conectar o backend a um banco de dados (Mysql ou SQLite). Implementar autenticação e autorização utilizando JWT.

  • Frontend com React: O frontend deve consumir a API criada no backend. Implementar gerenciamento de estado utilizando React (ou Context API). Implementar rotas com React Router (opcional, mas recomendado).

  • Testes (Opcional): Implementar testes básicos para o backend (unitários e/ou de integração) e frontend.

  • Deploy: (Opcional): Fazer o deploy da aplicação em uma plataforma de sua escolha (Heroku, Vercel, etc.).

Soluções proposta para atender os requisitos do projeto

  • Escolha de bibliotecas e tecnologias:

    • Vite: Por oferecer uma experiência de configuração. Ele é pré-configurado com as melhores práticas e opções de desenvolvimento, para não peder muito tempo com config e também não ter um servidor pesado e robusto sem a necessidade desse projeto.
    • React: Por ter mais conhecimento nessa bibliotecas e por saber que eu teria a necessidate de manipular vários estados na aplicação para assim poder rederizar os dados de acordo com os filtros;
    • Zustand: Para gerenciamento de estado no React.
    • React Router DOM: para realizar roteamento e para permite a passagem de parâmetros para suas rotas, o que facilita a criação de URLs dinâmicas e a recuperação desses parâmetros dentro dos componentes correspondentes.
    • NodeJS com Express: Para lidar com as requisições e trabalhar com endpoints diferentes conseguirndo manipular os dados que são retornado para o aplicação front end.