Skip to content

Projeto Agrix, uma API de gerenciamento de plantações e fertilizantes completo para fazendas. Fase B

Notifications You must be signed in to change notification settings

lucas-de-lima/projeto-agrix-fase-b

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Agrix - Fase B

Confira todas as fases do projeto aqui:

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.

Especificações do Projeto

🗄️ Descrição do Banco de Dados

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 relacionamento n:1 (muitos para um) com a tabela farm.
  • fertilizer: representa um fertilizante e está em um relacionamento n:n (muitos para muitos) com a tabela crop. Esse relacionamento é realizado através da tabela crop_fertilizer.

Modelo de tabelas

🏛️ Arquitetura da Aplicação

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 do Projeto

1. Ajuste da Rota POST /farms/{farmId}/crops para Utilizar Datas

📍🌐🛠️ 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
}

2. Ajuste da Rota GET /farms/{farmId}/crops para Utilizar Datas

📍🌐🛠️ 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
  }
]

3. Ajuste da Rota GET /crops para Utilizar Datas

📍🌐🛠️ 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
  }
]

4. Ajuste da Rota GET /crops/{id} para Utilizar Datas

📍🌐🛠️ 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
}

5. Criação da Rota GET /crops/search para Busca de Plantações

📍🌐 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
  }
]

6. Criação da Rota POST /fertilizers

📍🌐 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"
}

7. Criação da Rota GET /fertilizers

📍🌐 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"
  }
]

8. Criação da Rota GET /fertilizers/{id}

📍🌐 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"
}

9. Criação da Rota POST /crops/{cropId}/fertilizers/{fertilizerId}

📍🌐 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!

10. Criação da Rota GET /crops/{cropId}/fertilizers

📍🌐 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"
  }
]

Conclusão

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.