Fase | Link |
---|---|
Fase A | Fase A |
Fase B | Fase B |
Fase C | Fase C |
Bem-vindo ao projeto Agrix - Fase B! Este projeto é uma extensão da Fase A, com novas funcionalidades. Abaixo, detalho as etapas que foram realizadas com sucesso para atender aos requisitos desta fase.
Na Fase B, o banco de dados foi ampliado. A estrutura atualizada inclui as tabelas farm
, crop
, fertilizer
e crop_fertilizer
com os relacionamentos necessários para suportar as novas funcionalidades.
Neste modelo, temos as seguintes tabelas:
farm
: representa uma fazenda.crop
: representa uma plantação e está em um relacionamenton:1
(muitos para um) com a tabelafarm
.fertilizer
: representa um fertilizante e está em um relacionamenton:n
(muitos para muitos) com a tabelacrop
. Esse relacionamento é realizado através da tabelacrop_fertilizer
.
A aplicação foi estruturada utilizando o ecossistema Spring (Spring Boot, Spring Web, Spring Data, etc.), proporcionando flexibilidade e manutenção eficiente. As melhores práticas e padrões de projeto foram seguidos para garantir a qualidade do código.
📍🌐🛠️ Detalhes da Rota:
A rota POST /farms/{farmId}/crops foi ajustada para incluir os campos plantedDate
e harvestDate
, utilizando o tipo LocalDate
para manipulação de datas no formato ISO (YYYY-MM-DD).
Exemplo de requisição:
{
"name": "Couve-flor",
"plantedArea": 5.43,
"plantedDate": "2022-12-05",
"harvestDate": "2023-06-08"
}
Exemplo de resposta:
{
"id": 1,
"name": "Couve-flor",
"plantedArea": 5.43,
"plantedDate": "2022-12-05",
"harvestDate": "2023-06-08",
"farmId": 1
}
📍🌐🛠️ Detalhes da Rota:
A rota GET /farms/{farmId}/crops foi ajustada para incluir os novos campos com datas na resposta.
Exemplo de resposta:
[
{
"id": 1,
"name": "Couve-flor",
"plantedArea": 5.43,
"plantedDate": "2022-12-05",
"harvestDate": "2023-06-08",
"farmId": 1
},
{
"id": 2,
"name": "Alface",
"plantedArea": 21.3,
"plantedDate": "2022-02-15",
"harvestDate": "2023-02-20",
"farmId": 1
}
]
📍🌐🛠️ Detalhes da Rota:
A rota GET /crops foi ajustada para retornar todas as plantações cadastradas com os novos campos de datas.
Exemplo de resposta:
[
{
"id": 1,
"name": "Couve-flor",
"plantedArea": 5.43,
"plantedDate": "2022-02-15",
"harvestDate": "2023-02-20",
"farmId": 1
},
{
"id": 2,
"name": "Alface",
"plantedArea": 21.3,
"plantedDate": "2022-02-15",
"harvestDate": "2023-02-20",
"farmId": 1
},
{
"id": 3,
"name": "Tomate",
"plantedArea": 1.9,
"plantedDate": "2023-05-22",
"harvestDate": "2024-01-10",
"farmId": 2
}
]
📍🌐🛠️ Detalhes da Rota:
A rota GET /crops/{id} foi ajustada para retornar os dados da plantação com os novos campos de datas.
Exemplo de resposta:
{
"id": 3,
"name": "Tomate",
"plantedArea": 1.9,
"plantedDate": "2023-05-22",
"harvestDate": "2024-01-10",
"farmId": 2
}
📍🌐 Detalhes da Rota:
A rota GET /crops/search foi criada para buscar plantações a partir da data de colheita.
Exemplo de resposta:
[
{
"id": 1,
"name": "Couve-flor",
"plantedArea": 5.43,
"plantedDate": "2022-02-15",
"harvestDate": "2023-02-20",
"farmId": 1
},
{
"id": 3,
"name": "Tomate",
"plantedArea": 1.9,
"plantedDate": "2023-05-22",
"harvestDate": "2024-01-10",
"farmId": 2
}
]
📍🌐 Detalhes da Rota:
A rota POST /fertilizers foi criada para permitir a criação de um novo fertilizante.
Exemplo de requisição:
{
"name": "Compostagem",
"brand": "Feita em casa",
"composition": "Restos de alimentos"
}
Exemplo de resposta:
{
"id": 1,
"name": "Compostagem",
"brand": "Feita em casa",
"composition": "Restos de alimentos"
}
📍🌐 Detalhes da Rota:
A rota GET /fertilizers foi criada para listar todos os fertilizantes cadastrados.
Exemplo de resposta:
[
{
"id": 1,
"name": "Compostagem",
"brand": "Feita em casa",
"composition": "Restos de alimentos"
},
{
"id": 2,
"name": "Húmus",
"brand": "Feito pelas minhocas",
"composition": "Muitos nutrientes"
},
{
"id": 3,
"name": "Adubo",
"brand": "Feito pelas vaquinhas",
"composition": "Esterco"
}
]
📍🌐 Detalhes da Rota:
A rota GET /fertilizers/{id} foi criada para retornar as informações de um fertilizante específico.
Exemplo de resposta:
{
"id": 3,
"name": "Adubo",
"brand": "Feito pelas vaquinhas",
"composition": "Esterco"
}
📍🌐 Detalhes da Rota:
A rota POST /crops/{cropId}/fertilizers/{fertilizerId} foi criada para associar uma plantação com um fertilizante.
Exemplo de resposta:
Fertilizante e plantação associados com sucesso!
📍🌐 Detalhes da Rota:
A rota GET /crops/{cropId}/fertilizers foi criada para listar os fertilizantes associados a uma plantação.
Exemplo de resposta:
[
{
"id": 2,
"name": "Húmus",
"brand": "Feito pelas minhocas",
"composition": "Muitos nutrientes"
},
{
"id": 3,
"name": "Adubo",
"brand": "Feito pelas vaquinhas",
"composition": "Esterco"
}
]
Todos os requisitos da Fase B foram atendidos com sucesso, garantindo a expansão das funcionalidades do Agrix e mantendo a qualidade e integridade do projeto. O projeto está pronto para ser utilizado, oferecendo uma experiência robusta e eficiente para os usuários. Neste projeto além do que consegui fazer na Fase A, eu também consegui ser capaz de:
- Como implementar buscas customizadas.
- Utilizar campos de data nas rotas da API e no banco de dados.
- Criar testes unitários para garantir a qualidade e funcionamento correto da implementação, com cobertura de código adequada.