- Agenda - Teste Técnico Fullstack S3
- Shalom!
Essa aplicação foi desenvolvida para o teste técnico realizado na sprint 3 do módulo 6 para a Kenzie Academy Brasil no intuito de revisar e treinar testes técnicos para o mercado de trabalho.
O objetivo dessa aplicação é servir como um backend para o projeto fullstack de uma Agenda.
Frontend
Backend
Tecnologias usadas nesse projeto:
Base URL do deploy: colocar o link do vercel aqui
Clone o projeto em sua máquina local e instale por meio do yarn ou npm:
yarn install
npm install
Para executar o projeto em sua máquina local utilize o comando start do yarn ou npm:
yarn start
npm start
OBS: Não se esqueça de executar a aplicação de backend para que tudo funcione corretamente, use esse link para ter acesso a ela: https://github.com/brunotiberio/s3-fullstack-teste-backend-brunotiberio
É possível acessar à documentação completa da API utilizada nessa aplicação.
Nessa mesma documentação é possível adquirir informações sobre os requests, chaves necessárias do request e informações de algumas rotas.
Base URL da API: https://doc-fullstack-m6.vercel.app
O Objetivo principal dessa aplicação é a validação dos meus conhecimentos nos seguintes tópicos:
- JavaScript;
- React;
- TypeScript;
- Componentização;
- CSS;
- Inicialmente, decidi por começar pela análise do teste proposto, com isso, pude observar e pesquisar quais eram as tecnologias, frameworks e libs que poderiam ser usadas no desenvolvimento.
- Iniciei pelo backend, criando a arquitetura do servidor
- Interfaces e Entities;
- Middlewares
- Services e Controllers
- Routes
- Error e tratamentos
- Depois, trabalhei no frontend da aplicação.
- Por fim, fiz os demais fix necessários do código e a documentação da API
Foram criados, no total, 11 componentes:
- Header: cabeçalho da aplicação, onde é recebido o H1;
- Main: corpo da aplicação, onde é recebido por "children" todo o conteúdo base da aplicação;
- ContactDetail: componente responsável enviar os detalhes de um contato;
- ContactEdit: responsável pela parte da edição de um contato;
- Contacts: responsável pela renderização dos contatos;
- CreateContact: responsável pela criação dos contatos;
- Login: responsável pelo login e envio das informações em localstorage;
- PeronalData: responsável por renderizar os dados pessoais;
- Register: responsável pelo registro de um usuário;
- UpdatePassword: responsável pela alteração de senha de um usuário;
- UserEdit: responsável pelo edição dos dados de um usuário
Ao total, foram criadas 7 páginas para a construção da aplicação, sendo a página inicial, a que possui o componente de Login. As demais páginas são relacionadas ao CRUD de Usuário e Contatos
Observações gerais
- Para a criação de um usuário, os emails e passwords são passados dentro do mesmo input, separado por vírgulas. Pensei em utilizar o hook fieldsArray do React-Hook-Form, mas por questões de tempo de entrega, não consegui adaptar a tecnologia para o sistema, optando pela primeira alternativa. O mesmo vale para o cadastro dos emails e telefones dos contatos.
Para o desenvolvimento dessa aplicação, foram necessárias 7 rotas, duas delas (Login e Register) acessadas de forma pública, já as demais rotas só podem ser acessadas caso o usuário esteja logado. Para fazer essa proteção foram criadas nas pages um ternário que verifica se o token existe no localstorage (que é armazenado quando o usuário faz login), caso positivo a página é liberada, caso negativo, o usuário é redirecionado a página de Login.
A configuração da API ocorre em "services", utilizando a tecnologia "Axios", com a baseURL da API e um timeout de 8000 milissegundos (pois a resposta da API é praticamente instantânea)
Os possíveis erros da API (internal server error, timeout) foram tratados no catch da requisição, no "context", utilizando o Toastfy e retornando uma mensagem ao usuário.
Para os dados trafegarem pelos componentes, decidi usar o contextAPI do próprio React, por ser mais simples de se configurar e escalar a aplicação, a ferramenta permite a criação de um estado com as respostas da API, dessa forma, eu consigo enviar os dados gerados por ela, para o componente, tratando os possíveis erros de entrada do usuário e de resposta da API e gerando os resultados esperados da API.
Utilizei como ferramenta de estilização o Styled-Components, por se tratar de uma ferramenta completa. Dessa forma, criei um reset global para facilitar a estilização e pude criar componentes estilizados. Não utilizei nenhum tipo de "pre-render css" como Material UI ou Chakra, usando ao máximo meus conhecimentos em CSS e HTML.
Quero agradecer por essa oportunidade de poder fazer o teste técnico e espero poder ter conseguido cumprir com boa parte daquilo que foi solicitado