/jea-technical-challenge

Desafio técnico proposto pelo recrutamento da J&A Holding para nível Pleno

Primary LanguageTypeScript

Desafio Técnico - Project Management

Boas vindas ao repositório do Desafio Técnico - Case da empresa J&A

Esse desafio foi proposto pela time de recrutamento da empresa J&A, em que foram requisitadas habilidades necessáiras para desenvolver um projeto Full Stack. O resultado final é uma plataforma para organização e acompanhamento dos projetos pelos usuários que se cadastram na plataforma, salvando dados num banco de dados SQL através de uma API.


📌 Sumário


💻 Contexto do Case

"Nesse desafio, você deverá criar uma aplicação para nos mostrar suas skills e se elas estão de acordo com o dia-a-dia do nosso time de desenvolvimento!"

"Essa será uma aplicação para gerenciar projetos. Será permitida a criação de um usuário com name, password e username, bem como fazer o CRUD de projects"

Abaixo estão os requisitos técnicos e as funcionalidades que a solução deve possuir:

Requisitos técnicos

  • Front-End para uso do CRUD dos projetos na área logada;
  • Back-End em NodeJS ou Python com rotas especificadas;
  • Modalagem PostgreSQL;

Funcionalidades

  • Listar todos os projects;
  • Alterar o title e deadline de um projeto existentes;
  • Marcar um projeto como feito;
  • Excluir um projeto;

🚀 Entregáveis

A solução do desafio foi separarada em duas partes: front-end e back-end, cada em sua respectiva pasta com as seguintes tecnologias principais:

Front-End

React
Typescript
ReactHooksForms
MUI
Jotai
ReactQuery

Back-End

Nest
Nodejs
JWT
ClassValidator
GraphQL

Banco de Dados

PostgreSQL

Criação do Ambiente

Docker

Gostaria de informar que me autodesafiei muito nesse case e quis desenvolve-lo com tecnologias em alta no mercado, algumas que até eu nunca tinha trabalhado antes como: Postgre, GraphQL, Rect Hooks Forms, Nestjs e Docker. Por estar atuando a muitos meses no front-end imaginei que iria sentir muita dificuldade na instalação, configuraçao e manipulação do Postgre, um SGBD que nunca havia trabalhado, mas utilizando o Docker consegui criar uma ambiente com tudo que eu precisava sem se quer ter que fazer as configurações manuais que levam tempo para os desenvolvedores inciarem de fato a programação dos seu apps no projeto. Acredito que o ponto alto foi de fato o Docker. Além de claro, o GraphQL que me ajudou a criar com um único end-point a API com tudo que eu precisava.


⬇️ Uso do projeto localmente

Para facilitar o processo de rodar o projeto localmente. Recomendo seguir o passo a passo descrito a abaixo, após instalar o Docker e Docker Compose em seu notebook usando a própria documentação da ferramenta para o seu sistema operacional. Em poucos passos você vai perceber que o projeto estará rodando em seu notebook com poucos comandos. É sensacional! Mas se preferir em cada pasta há um readme gerado pelas ferramentas pricipais que explica como manipular e instalar as dependências de cada pasta.

Vamos lá!

Clone do repositório

  1. Abra o terminal e crie um diretório no local de sua preferência com o comando mkdir:
  mkdir desafio-jea
  1. Entre no diretório que acabou de criar e depois clone o projeto:
  cd desafio-jea
  git clone https://github.com/dudawiltiner/jea-technical-challenge.git

Instalação das dependências

  1. Entre no diretório criado após a clonagem do repositório.
  cd jea-technical-challenge
  1. Crie um arquivo .env na raiz do projeto e em cada pasta (front-end e back-end) com essas variáveis de ambiente.
  API_PORT=3001
  
  APP_PORT=3000
  APP_ENDPOINT=http://localhost:3001/graphql

  DB_HOST=localhost
  DB_PORT=5435
  DB_USERNAME=eduarda
  DB_PASSWORD=dbpass
  DB_NAME=project
  DB_SYNC=true #sincronização para desenvolvimento
  1. Garanta de remover todas os containers, volumes e imagens que você possui.
   docker-compose down -v --rmi all
  1. Limpar tudo que ainda tiver.
   docker system prune -af
  1. Instale todas as dependências e rode a aplicação, usando o CLI docker-compose.
   docker-compose up --build

⚡ Usando a plataforma

Após cada um dos passos a seguir, haverá um exemplo de como cada página pode ser usada, caso tenha dificuldades e o exemplo não seja suficiente, não hesite em me contatar em eduardawiltiner@gmail.com.

Primeiro Acesso

Acessando a plataforma neste link, você irá encontrar a tela de Login, em que será redirecionado(a) e poderá realizar o cadastro na tela após clicar no link.

login

Login

Será onde você deverá se autenticar para ter acesso ao acompanhamento dos projetos na página Home. Sem a autenticação você não terá acesso a Home, mas quando autenticado(a) você não terá que fazer o login novamente quando fechar a página e abri-la depois durante 15 minutos, por conta do uso do JWT e cookies configurados.

login

Criando um projeto

Para criar uma tarefa, você deve apenas clicar no "+" do botão flutuante. Uma data de prazo já estará configurada para o mesmo dia de criação da tarefa, mas você pode modificá-la. Que tal colocar um darkmode?!

criando uma tarefa

Atualizando um projeto

Para atualizar um projeto, você deve apenas clicar no símbolo de edição no card de cada projeto. E você pode também excluir ou clicar no check para mudar o status para done.

atualizando uma tarefa

Filtrar os projetos

Você pode filtrar os projetos para aparecer apenas os que estão sob a sua responsabilidade.

filtro de tarefas

Realizando o Logout e Digitando a URL de forma errada

Para se desconectar da sua conta, só é necessário clicar em seu nome no NavBar e, em seguida, clicar em "Sair". Ao digitar a URL do site de forma errada, não se preocupe, vai paracer a página de erro 404 que vai te ajudar a voltar a Home.

erro 404

Documentação da API

Com o GraphQl temos como testar e olhar a documentação playground da ferramenta. Isso facilita com os testes e na tipagem acessando o seguinte link.

erro 404