Este projeto implementa uma versão simplificada da comunicação com o sistema Proagro Fácil da empresa Softfocus.
A documentação da API implementada está sendo construída utilizando a ferramenta Postman. Você pode acessar a última versão através dest link. Você também pode acessar a documentação gerada automaticamente pelo FastAPI utilizando esse link.
Na próxima seção são apresentados os passos para rodar as aplicações front e back end localmente. No entanto, você também pode acessar o deploy da aplicação do Front End e do Back End.
Na sua máquina você deve ter:
- Sistema Operacional Distribuição Unix
- Node versão 16 (versão igual ou superior à
16.15.0 LTS
) - Docker
- Docker-compose versão >=1.29.2
A seguir você encontra um guia de como instalar e rodar o projeto localmente. Em caso de dúvidas, problemas ou feedbacks, entre em contato.
Passo 1. Crie o repositório local utilizando mkdir
:
mkdir project-proagro-facil
Passo 2. Mude para o repositório criado:
cd project-proagro-facil
Passo 3. Clone o projeto:
git clone [email protected]:heitortessaro/proagro-facil.git
Passo 4. Mude para o diretório clonado:
cd proagro-facil
Passo 5. Inslate todas as dependências:
npm install
Passo 6. Mude para a pasta app:
cd app
Step 7. Rode os containers da aplicação
docker-compose up -d --build
Depois de subir os container da aplicação, você pode acessar o front end utilizando o endereço http://localhost:3000.
Em funções da limitação de tempo no desenvolvimento, alguns pontos foram indicados na seção de Melhorias Futuras para esse projeto. Uma delas é a utilização de variáveis de ambiente no front end. No momento, se por alguma razão for necessário alterar a URL base para comunicação com a api, por favor, edite o arquivo app/frontend/src/services/baseURL.js.
Caso você queira reiniciar a aplicação local, você pode desmontar os containers utilizando:
docker-compose down
E depois reiniciar a aplicação com:
docker-compose up -d --build
Na sequeência são listadas as principais tecnologias utilizadas para a implementação do projeto.
- React: biblioteca JavaScript para construir interfaces de usuário.
- Tailwind: estrutura CSS que fornece um catálogo classes e ferramentas CSS para facilitar a estilização da aplicação.
- Fastapi: web framework para construir APIs com Python.
- Uvicorn: é uma implementação de servidor web ASGI para Python.
- Motor: é um driver Python assíncrono para interação com o MongoDB.
- Pydantic: usado para a validação de dados e gerenciamento de configurações usando anotações de tipo em Python.
- Geopy: biblioteca para obtenção e tratamentos de dados geográficos. Neste projeto, foi utilizada a função para calcular a distância entre duas coordenadas do globo.
Para a implementação do banco de dados se utilizou o MongoDB, tomando proveito do serviço Atlas.
A seguir é apresentada a estrutura de pastas utilizada no front end:
src
┣ components
┃ ┣ Delete.jsx
┃ ┣ Navbar.jsx
┃ ┣ Register.jsx
┃ ┣ RegisterCard.jsx
┃ ┣ Search.jsx
┃ ┣ Select.jsx
┃ ┣ SelectService.jsx
┃ ┗ Update.jsx
┣ services
┃ ┣ fetches
┃ ┃ ┣ fakeResponse.js
┃ ┃ ┣ fetchAtualizacao.js
┃ ┃ ┣ fetchBuscaCpf.js
┃ ┃ ┣ fetchBuscaId.js
┃ ┃ ┣ fetchCadastro.js
┃ ┃ ┗ fetchDelete.js
┃ ┣ validations
┃ ┃ ┣ validateCPF.js
┃ ┃ ┣ validateCoordnates.js
┃ ┃ ┣ validateForms.js
┃ ┃ ┗ validateId.js
┃ ┣ baseURL.js
┃ ┗ eventTypes.js
┣ App.css
┣ App.js
┣ App.test.js
┣ index.css
┣ index.js
┣ reportWebVitals.js
┗ setupTests.js
A seguir é apresentada a estrutura de pastas do back end:
backend
┣ .pytest_cache
┃ ┣ v
┃ ┃ ┗ cache
┃ ┃ ┃ ┣ lastfailed
┃ ┃ ┃ ┣ nodeids
┃ ┃ ┃ ┗ stepwise
┃ ┣ .gitignore
┃ ┣ CACHEDIR.TAG
┃ ┗ README.md
┣ app
┃ ┣ model
┃ ┃ ┣ database.py
┃ ┃ ┗ proagro.py
┃ ┣ routes
┃ ┃ ┣ __init__.py
┃ ┃ ┣ ping.py
┃ ┃ ┗ register.py
┃ ┣ schemas
┃ ┃ ┗ proagro.py
┃ ┣ services
┃ ┃ ┣ __init__.py
┃ ┃ ┗ validations.py
┃ ┣ __init__.py
┃ ┗ main.py
┣ test
┃ ┣ __init__.py
┃ ┣ conftest.py
┃ ┗ test_main.py
┣ DEPLOY_Dockerfile.txt
┣ Dockerfile
┣ heroku.yml
┗ requirements.txt
Aqui são apresentadas possíveis melhorias que ainda não foram implementadas no projeto.
- Utilizar variáveis de ambiente para definir a url da api para o front end e para fornecer a string de acesso ao banco de dados no back end.
- Aprimorar a componentização do front end, principalmente para os componentes Update e Register.
- Implementar testes unitários para font e back end.
- Implementar testes E2E para o front e back end.
- Adicionar um sistema de login e autenticação ao sistema. Uma opção seria utilizar JWT, de modo a liberar acesso as funcionalidades das rotas apenas a usuários autorizados.
- Adicionar rota de login e criação de usuário.
- Aprimorar a estrutura organizacional do back end
- Aplicar conceitos SOLID em ambas as aplicações, front end e back end.
Além da documentação das técnologias previamente cidatas, também foram utilizados guias de implementação. Abaixo são listadas as referências utilizadas: