Skip to content
/ agrix Public

Sistema que ajuda na gestão e monitoramento de fazendas com o intuito de melhorar a eficiência no cultivo de plantações.

Notifications You must be signed in to change notification settings

GabiNamu/agrix

Repository files navigation

Agrix 🌾

@@ Sobre @@

Agrix é um um sistema que ajuda na gestão e monitoramento de fazendas com o intuito de melhorar a eficiência no cultivo de plantações

🗄️ Banco de dados

Modelo de tabelas

@@ Habilidades trabalhadas @@
  • Conhecimento do ecossistema Spring para criar rotas da API;
  • injeção de dependência para conectar as camadas de controle, serviço e persistência;
  • Spring Data JPA para implementar entidades e repositórios para a persistência em banco de dados, bem como implementar buscas customizadas;
  • Gerenciamento de erros no Spring Web;
  • Dockerfile para configurar a aplicação para execução no Docker;
  • Utilizei campos de data nas rotas da API e no banco de dados;
  • Testes unitários para garantir a qualidade e funcionamento correto da implementação, com cobertura de código adequada;
  • Spring Security para adicionar autenticação ao projeto;
  • Garanti que diferentes rotas atenda a regras específicas de autorização.
@@ Rotas @@
! Para conseguir acessar as rotas é necessário cria um usuário através da rota persons 
! e logar através da rota auth/login para receber o Token.

POST /persons:

🔍 Formato/exemplo de requisição e resposta

Exemplo de requisição na rota POST /persons:

{
  "username": "zerocool",
  "password": "senhasecreta",
  "role": "ADMIN"
}

Exemplo de resposta:

{
  "id": 1,
  "username": "zerocool",
  "role": "ADMIN"
}

POST /auth/login:

🔍 Formato/exemplo de requisição e resposta

Exemplo de requisição na rota POST /auth/login (suppondo que os dados estejam corretos):

{
  "username": "zerocool",
  "password": "senhasecreta"
}

Exemplo de resposta:

{
  "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhZ3JpeCIsInN1YiI6Im1ycm9ib3QiLCJleHAiOjE2ODk5ODY2NTN9.lyha4rMcMhFd_ij-farGCXuJy-1Tun1IpJd5Ot6z_5w"
}

POST /farms:

🔍 Formato/exemplo de requisição e resposta

Exemplo de requisição:

{
  "name": "Fazendinha",
  "size": 5
}

Exemplo de resposta:

{
  "id": 1,
  "name": "Fazendinha",
  "size": 5
}

GET /farms:

! Acesso liberado apenas para usuários de role - USER, ADMIN OU MANAGER.
🔍 Formato/exemplo de resposta

Exemplo de resposta:

[
  {
    "id": 1,
    "name": "Fazendinha",
    "size": 5.0
  },
  {
    "id": 2,
    "name": "Fazenda do Júlio",
    "size": 2.5
  }
]

GET /farms/{id}:

🔍 Formato/exemplo de resposta

Exemplo de resposta para a rota /farms/3 (supondo que exista uma fazenda com id = 3):

{
  "id": 3,
  "name": "My Cabbages!",
  "size": 3.49
}

POST /farms/{farmId}/crops:

🔍 Formato/exemplo de requisição e resposta

Exemplo de requisição na rota /farms/1/crops (supondo que exista uma fazenda com id = 1):

{
  "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
}

Note que o id da resposta se refere à plantação, e que o da fazenda está em farmId.

GET /farms/{farmId}/crops:

🔍 Formato/exemplo de resposta

Exemplo de resposta para a rota /farms/1/crops (supondo que exista uma fazenda com id = 1):

[
  {
    "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
  }
]

GET /crops:

! Acesso liberado apenas para usuários de role - ADMIN OU MANAGER.
🔍 Formato/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
  }
]

GET /crops/{id}:

🔍 Formato/exemplo de resposta

Exemplo de resposta para a rota /crops/3 (supondo que exista uma plantação com id = 3:

{
  "id": 3,
  "name": "Tomate",
  "plantedArea": 1.9,
  "plantedDate": "2023-05-22",
  "harvestDate": "2024-01-10",
  "farmId": 2
}

GET /crops/search:

🔍 Formato/exemplo de resposta
- deve receber dois parâmetros por query string para busca: - `start`: data de início - `end`: data de fim

Exemplo de resposta para a rota /crops/search?start=2023-01-07&end=2024-01-10:

[
  {
    "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
  }
]

POST /fertilizers:

🔍 Formato/exemplo de requisição e resposta

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

GET /fertilizers:

! Acesso liberado apenas para usuários de role ADMIN.
🔍 Formato/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"
  }
]

GET /fertilizers/{id}:

🔍 Formato/exemplo de resposta

Exemplo de resposta da rota /fertilizers/3 (supondo que exista um fertilizante com id = 3):

{
  "id": 3,
  "name": "Adubo",
  "brand": "Feito pelas vaquinhas",
  "composition": "Esterco"
}

POST /crops/{cropId}/fertilizers/{fertilizerId}:

🔍 Formato/exemplo de requisição e resposta
Rota para criar a associação entre uma plantação e um fertilizante.

Exemplo de resposta para a rota /crops/1/fertilizers/2 (supondo que exista uma plantação com id = 1 e um fertilizante com id = 2):

Fertilizante e plantação associados com sucesso!

GET /crops/{cropId}/fertilizers:

🔍 Formato/exemplo de resposta
Rota para listar os fertilizante associados a uma plantação. Exemplo de resposta para a rota `/crops/2/fertilizers` (supondo que exista uma plantação com `id = 2`):
[
  {
    "id": 2,
    "name": "Húmus",
    "brand": "Feito pelas minhocas",
    "composition": "Muitos nutrientes"
  },
  {
    "id": 3,
    "name": "Adubo",
    "brand": "Feito pelas vaquinhas",
    "composition": "Esterco"
  }
]
@@ Principais tecnológias @@
+ Java;
+ JUnit;
+ Docker;
+ Mysql;
+ JWT;
+ Spring

About

Sistema que ajuda na gestão e monitoramento de fazendas com o intuito de melhorar a eficiência no cultivo de plantações.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published