https://github.com/octavioduarte/brain
A simple API using Node, Express, Typescript, Prisma, Joi and PostgreSQL.
https://github.com/octavioduarte/brain
Last synced: 9 months ago
JSON representation
A simple API using Node, Express, Typescript, Prisma, Joi and PostgreSQL.
- Host: GitHub
- URL: https://github.com/octavioduarte/brain
- Owner: octavioduarte
- Created: 2023-11-25T19:37:10.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-11-30T01:28:27.000Z (over 2 years ago)
- Last Synced: 2023-11-30T02:32:07.936Z (over 2 years ago)
- Language: TypeScript
- Size: 104 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
Executando o projeto:
1º Primeiramente instale as dependêncis com:
~~~bash
npm i
~~~
2º Crie o o arquivo .env, com a variável `DATABASE_URL` com a string de conexão.
3º Caso não tenha o [Nodemon](https://nodemon.io/) instalado, execute o comando (se já tiver o pacote instalado, pule para o passo 4) :
~~~bash
npm install -g nodemon
#Esta função instala um pacote a nível global em sua máquina então precisa ser executada
#com o acesso de um administrador, usando sudo no linux ou executando o terminal como administrador no Windows
~~~
4º Faça o build do projeto com o comando:
~~~bash
npm run build
~~~
5º Para que o ORM ([prisma](https://www.prisma.io/)) faça a conexão inicial com o banco é necessário executar:
~~~bash
npx prisma generate
~~~
6º Por último para startar o projeto na porta 3000, execute o comando
~~~bash
npm run dev
~~~
Se tudo der certo você vai receber uma mensagem do [Nodemon](https://nodemon.io/) informando que o servidor está sendo executado, após isso você pode testar os endpoints.
Abaixo estão alguns curls que você pode executar, ou se preferir copiar e colar o conteúdo do arquivo `Insomnia_2023-11-28.json` no [Insomnia](https://insomnia.rest/download).
# Para cadastrar um novo produtor
~~~curl
curl --request POST \
--url http://localhost:3000/brain/producer \
--header 'Content-Type: application/json' \
--header 'User-Agent: insomnia/8.4.5' \
--data '{
"name": "Usuário 2",
"document": "09292678000",
"document_type": "CPF",
"farm": [
{
"name": "Fazenda Paraiba",
"zip_code": "64027660",
"area": 2500,
"arable_area": 1000,
"vegetation_area": 500,
"cultures": [
{
"id": 10,
"occupation_area": 500
}
]
}
]
}'
~~~
# Para ativar ou inativar um produtor (exclusão lógica)
~~~curl
curl --request PATCH \
--url http://localhost:3000/brain/producer \
--header 'Content-Type: application/json' \
--header 'User-Agent: insomnia/8.4.5' \
--data '{
"document": "09292678000",
"document_type": "CPF",
"new_status": false
}'
~~~
# Para carregar as métricas
~~~curl
curl --request GET \
--url http://localhost:3000/brain/metrics \
--header 'User-Agent: insomnia/8.4.5'
~~~
Rotas da aplicação:
Método: `POST`
Descrição: *Regitrar novos produtores rurais com suas fazendas.*
Cenários de validação:
- Verifica se o CPF ou CNPJ é válido (campo 'document').
- Verifica se o CPF ou CNPJ já está cadastrado na base.
- Verifica se o tipo de documento é válido (campo 'document_type') - Aceita CPF e CNPJ.
- Valida cada campo da request para garantir que as tipagens e os atributos estão corretos.
- Faz integração com a API da viacep para obter cidade e estado a partir do CEP.
- Cálculo das áreas da fazenda x cultura:
- Garante que a soma da área das culturas plantadas não supere a área da fazenda.
- Garante que a soma da área das culturas plantadas não supere a área agricultável.
- Garante que a soma da área agricutável com a área de vegetação não supera a área da fazenda.
Método: `PATCH`
Descrição: *Altera o status de ativo do usuário.*
Cenários de validação:
- Verifica se o CPF ou CNPJ é válido (campo 'document').
- Verifica se o CPF ou CNPJ existe na base.
- Verifica se o tipo de documento é válido (campo 'document_type') - Aceita CPF e CNPJ.
- Valida cada campo da request para garantir que as tipagens e os atributos estão corretos.
Obs: Uma vez que o status esteja inativado o usuário passa a não ser considerado nos demais fluxos da API.
Método: `GET`
Descrição: *Carrega métricas dos dados cadastrados.*
~~~json
{
"farms_total" // total de fazendas cadastradas
"farms_total_area_in_hct" // soma da área das fazendas cadastradas
"farms_total_arable_area_in_hct" // soma da área agricutável das fazendas cadastradas
"farms_total_vegetation_area_in_hct" // soma da área de vegetação das fazendas cadastradas
"farms_total_by_state": {
"sp" // <-- sigla UF: {
"farms_total" // soma das fazendas vinculadas a um estado
"farms_total_area_in_hct" // soma da área das fazendas cadastradas do estado
}
},
"total_by_culture": {
"soja": {
"total_occupation_in_hct": // soma da área de ocupação da cultura
}
}
}
~~~