Skip to content

O primeiro produto da nossa empresa AgroTech, empresa fictícia, foi um sucesso! Fiquei responsável por expandir a aplicação e incluir algumas funcionalidades extra. Inclusive, recebi uma base de código pronta que adquiri de outra empresa, e que precisará ser testado.

License

Notifications You must be signed in to change notification settings

ludson96/agrix-fase-b

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

23 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Repositório do projeto Agrix - Fase B 🚜

Repositório possuí projeto desenvolvido abordando conceitos de testes com Spring Data, data e hora, buscas customizadas e auditoria.

Informações de aprendizados

  • Primeiro projeto usando testes com Spring Data, data e hora, buscas customizadas e auditoria;

Linguagens e ferramentas usadas

Git Java Apache Maven Docker MySQL Spring Spring Boot Hibernate

O que foi desenvolvido

O primeiro produto da nossa empresa AgroTech, empresa fictícia, foi um sucesso! Fiquei responsável por expandir a aplicação e incluir algumas funcionalidades extra. Inclusive, recebi uma base de código pronta que adquiri de outra empresa, e que precisará ser testado.

Habilidades trabalhadas

  • Utilizar campos de data nas rotas da API e no banco de dados
  • Aplicar o conhecimento do ecossistema Spring para criar rotas da API.
  • Aplicar a injeção de dependência para conectar as camadas de controle, serviço e persistência.
  • Criar testes unitários para garantir a qualidade e funcionamento correto da implementação, com cobertura de código adequada.
  • Utilizar o Spring Data JPA para implementar entidades e repositórios para a persistência em banco de dados, bem como implementar buscas customizadas.

Instruções para instalar e rodar

  1. Clone o repositório (recomendado usar em SSH) e entre na pasta:

    git clone git@github.com:ludson96/agrix-fase-b.git
    cd agrix-fase-b
  2. Instale as dependências:

    mvn install
  3. Caso não tenha jdk ou maven instalados, basta executar o Docker com o comando abaixo:

    #Comando para gerar imagem.
    docker build . -t multi-stage-image
    
    #Comando para executar o container usando a imagem gerada anteriormente. Irá executar o servidor Spring automaticamente e podendo ignorar o passo abaixo.
    docker run -p 8080:8080 --name multi-stage-container multi-stage-image
  4. Para executar o servidor spring:

    mvn clean package
    java -jar target/agrix-1.0-SNAPSHOT.jar

Detalhamento de execução

Farm

Endpoints

1. POST /farms

Cria uma nova fazenda

Funciona da seguinte forma:

  • /farms (POST)
    • deve receber via corpo do POST os dados de uma fazenda.
      • Exemplo de requisição:
        {
          "name": "Fazendinha",
          "size": 5
        }
    • em caso de sucesso:
      • retornar o status HTTP 201 (CREATED)

      • retornar os dados da fazenda criada. O id da fazenda esta incluso na resposta.

        • Exemplo de resposta:
        {
          "id": 1,
          "name": "Fazendinha",
          "size": 5
        }

2. GET /farms

Retorna todas as fazendas cadastradas

Funciona da seguinte forma:

  • /farms (GET)
    • retorna uma lista de todas as fazendas. O id da fazenda esta incluso na resposta.
      • Exemplo de resposta:

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

3. GET /farms/{id}

Retorna informações de uma fazenda especifica

Funciona da seguinte forma:

  • /farms/{id} (GET):
    • recebe um id pelo caminho da rota e retorna a fazenda com esse id. O id da fazenda esta incluso na 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
        }
    • caso não exista uma fazenda com esse id, a rota retorna o status HTTP 404 com a mensagem Fazenda não encontrada! no corpo da resposta.

4. POST /farms/{farmId}/crops

Cria uma nova plantação

Funciona da seguinte forma:

  • /farms/{farmId}/crops (POST)
    • recebe o id da fazenda pelo caminho da rota (representado aqui por farmId apenas para diferenciar da plantação)
      • recebe via corpo do POST os dados da plantação e salva a nova plantação a partir dos dados recebidos, associada à fazenda com o ID
        • 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"
          }
    • em caso de sucesso:
      • retorna o status HTTP 201 (CREATED)
      • retorna os dados da plantação criada. A resposta inclui o id da plantação e o id da fazenda.
        • caso não exista uma fazenda com o id passado, retorna o status HTTP 404 com a mensagem Fazenda não encontrada! no corpo da resposta.

        • Exemplo de resposta:

          {
            "id": 1,
            "name": "Couve-flor",
            "plantedArea": 5.43,
            "plantedDate": "2022-12-05",
            "harvestDate": "2023-06-08",
            "farmId": 1
          }

5. GET /farms/{farmId}/crops

Lista as plantações de uma fazenda específica

Funciona da seguinte forma:

  • /farms/{farmId}/crops (GET):
    • recebe o id de uma fazenda pelo caminho

    • retorna uma lista com todas as plantações associadas à fazenda

      • 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
        }
      ]
    • caso não exista uma fazenda com esse id, retorna o status HTTP 404 com a mensagem Fazenda não encontrada! no corpo da resposta.

6. GET /crops

Lista todas as plantações cadastradas

Funciona da seguinte forma:

  • /crops (GET)
    • retorna uma lista de todas as plantações cadastradas. A resposta inclui o id de cada plantação e o id da fazenda associada.
      • 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
          }
        ]

7. GET /crops/{id}

Retorna as informações de plantações de uma fazenda especifica

Funciona da seguinte forma:

  • /crops/{id} (GET):
    • recebe o id de uma plantação pelo caminho da rota

    • caso exista a plantação com o id recebido, retorna os dados da plantação. A resposta inclui o id de cada plantação e o id da fazenda associada.

      • 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
      }
    • caso não exista uma plantação com o id passado, retorna o status HTTP 404 com a mensagem Plantação não encontrada! no corpo da resposta.

8. GET /crops/search

Busca plantações a partir da data de colheita

Funciona da seguinte forma:

  • /crops/search (GET)
    • recebe dois parâmetros por query string para busca:
      • start: data de início
      • end: data de fim
    • retorna uma lista com as plantações nas quais o campo harvestDate esteja entre as data de início e de fim.
      • a comparação das datas são inclusiva (ou seja, deve incluir datas que sejam iguais à de início ou à de fim)
    • a resposta inclui o id de cada plantação e o id da fazenda associada, mas inclui os dados da fazenda.
      • 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
          }
        ]

9. POST /fertilizers

Cria um novo fertilizante

A rota a ser criada é:

  • /fertilizers (POST)
    • recebe via corpo do POST os dados de um fertilizante
    • salva um novo fertilizante a partir dos dados recebidos
      • em caso de sucesso:
        • retorna o status HTTP 201 (CREATED)

        • retorna os dados do fertilizante criado, incluindo seu id

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

10. GET /fertilizers

Lista todos os fertilizantes cadastrados

A rota a ser criada é:

  • /fertilizers (GET):
    • retorna uma lista de todos os fertilizantes cadastrados, incluindo o id de cada.

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

11. GET /fertilizers/{id}

Retorna informações de um fertilizante

A rota a ser criada é:

  • /fertilizers/{fertilizerId} (GET):
    • recebe o id de um fertilizante pelo caminho da rota

    • caso exista o fertilizante com o id recebido, retorna seus dados, incluindo seu id

    • caso não exista um fertilizante com o id passado, a rota retorna o status HTTP 404 com a mensagem Fertilizante não encontrado! no corpo da 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"
      }

12. POST /crops/{cropId}/fertilizers/{fertilizerId}

Associa uma plantação a um fertilizante

A rota a ser criada é:

  • /crops/{cropId}/fertilizers/{fertilizerId} (POST)
    • recebe tanto o id da plantação quanto o id do fertilizante pelo caminho da rota
    • o corpo da requisição será vazio
    • faz a associação entre o fertilizante e a plantação
    • em caso de sucesso, retorna o status HTTP 201 (CREATED) com a mensagem Fertilizante e plantação associados com sucesso! no corpo da resposta
    • caso não exista uma plantação com o id recebido, a rota retorna o status HTTP 404 com a mensagem Plantação não encontrada! no corpo da resposta.
    • caso não exista um fertilizante com o id recebido, a rota retorna o status HTTP 404 com a mensagem Fertilizante não encontrado! no corpo da resposta.
      • 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!
        

13. GET /crops/{cropId}/fertilizers

Lista os fertilizante associados a uma plantação

A rota a ser criada é:

  • /crops/{cropId}/fertilizers (GET):
    • recebe o id de uma plantação pelo caminho
    • retorna uma lista com todas os fertilizantes associados à plantação
    • caso não exista uma plantação com o id recebido, a rota retorna o status HTTP 404 com a mensagem Plantação não encontrada! no corpo da resposta.
      • 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"
          }
        ]

About

O primeiro produto da nossa empresa AgroTech, empresa fictícia, foi um sucesso! Fiquei responsável por expandir a aplicação e incluir algumas funcionalidades extra. Inclusive, recebi uma base de código pronta que adquiri de outra empresa, e que precisará ser testado.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published