Skip to content

Delivery system associated with drone, developed in Java. Ultimate Java Acceleration Project - Group 6

Notifications You must be signed in to change notification settings

isabelarfloriano/drone-feeder

Repository files navigation

Projeto Drone Feeder (FutureH)

Descrição do Projeto 📦

A empresa FutureH registrou uma nova patente que permitirá a entrega de pacotes com drones. O projeto Drone Feeder é o serviço Back-end, que irá fornecer informações aos drones, monitorando as entregas realizadas.

O Drone Feeder foi desenvolvido com Java utilizando Spring-boot, para coletar informações como os dados do drone, entregas realizadas e vídeos feitos durante as entregas e adicioná-las em um banco de dados MySQL.

💻 Tecnologias utilizadas

🚨 Como utilizar

📍 Pré-requisitos 📝

  • Apache Maven 3.6.3
  • Java 11.0.18
  • docker version 23.0.2
  • docker-compose version 2.4.1
  • MySQL version 5.7

Instalação do projeto localmente 💻

  • Clone o repositório git@github.com:isabelarfloriano/drone-feeder.git.
  • Vá para a pasta do projeto cd drone-feeder.
  • Instale as dependências mvn install.
  • Configure o arquivo application.yml, localizado no caminho (src/main/resources), alterando os campos username e password com as suas informações locais do MySQL.
  • Certifique-se de que o MySQL está inicializado.
  • Execute o comando mvn spring-boot:run.

📌 Para executar o Docker

  • Verifique se as portas 3306 e 8080 estão disponíveis com os respectivos comandos sudo lsof -i :3306 e telnet localhost 8080.
  • Renomeie o arquivo '.env.example' para '.env' que se encontra na pasta Docker.
  • Certifique-se de que os campos username e password do arquivo application.yml estão configurados como root e password respectivamente.
  • Certifique-se que seu Docker está startado.
  • Abra um terminal na pasta Docker e execute o comando docker-compose up -d.
  • Abra outro terminal no mesmo endereço e execute o comando docker exec -it docker-db-1 mysql -u root -p, inserindo a senha 'password' quando solicitado. Deve ser exibido normalmente o terminal interativo do MySQL no container.
  • Abra outro terminal no mesmo endereço e execute o comando docker compose logs -f drone-feeder. Deve ser exibido no terminal o build da aplicação, assim como quando usamos o comando mvn spring-boot:run.

📌 Para testar o projeto

  • Rode o comando mvn test

🚩 Endpoints

🛸 Drones

GET /dronefeeder/drone: lista todos os drones cadastrados
GET /dronefeeder/drone/{id}: busca um drone pelo seu ID
GET /dronefeeder/drone/{id}/deliveries: busca todas as entregas do drone pelo seu ID
GET /dronefeeder/drone/{id}/videos: busca todos os videos do drone pelo seu ID
POST /dronefeeder/drone: cria um novo drone
PUT /dronefeeder/drone/{id}: atualiza um drone existente pelo ID
DELETE /dronefeeder/drone/{id}: exclui um drone existente pelo ID 

📦 Entregas

GET /dronefeeder/delivery: lista todas as entregas cadastradas
GET /dronefeeder/delivery/{id}: busca uma entrega pelo seu ID
POST /dronefeeder/delivery: cria uma nova entrega associada a um drone
PUT /dronefeeder/delivery/{id}: atualiza uma entrega existente pelo seu ID
DELETE /dronefeeder/delivery/{id}: exclui uma entrega existente pelo seu ID

🎥 Vídeos

GET /dronefeeder/video: lista todos os vídeos cadastrados
GET /dronefeeder/video/{id}: busca um video pelo seu ID
POST /dronefeeder/video: cria um novo vídeo associado a um drone
PUT /dronefeeder/video/{id}: atualiza um vídeo existente pelo seu ID
DELETE /dronefeeder/video/{id}: exclui um vídeo existente pelo seu ID

Associações das tabelas

Minha imagem

🛸 📦 Drone - Delivery

  • Uma entrega pode estar associada a um drone
  • Um drone pode ter várias entregas associadas

🛸 🎥 Drone - Video

  • Uma vídeo está associado somente a um drone
  • Um drone pode ter vários vídeos associados

📦 🎥 Delivery - Video

  • Uma entrega está associado somente a um drone

🚨 Documentação

🔶 Detalhamento dos endpoints dos Drones


Lista todos os drones

GET /dronefeeder/drone

Esse endpoint retorna status 200 e o todos os Drones cadastrados.

  • Exemplo response body
        [
            {
                "id": 1,
                "brand": "Heygelo",
                "modelName": "S90"
                "serialNumber": "123456"
            },
            {
                "id": 2,
                "brand": "Deerc",
                "modelName": "D20"
                "serialNumber": "456789"
            },
            {
                "id": 3,
                "brand": "Neheme",
                "modelName": "NH760"
                "serialNumber": "123789"
            }
        ]

Lista o drone pelo id

GET /dronefeeder/drone/{id}

Esse endpoint retorna status 200 e o Drone cadastrado.

  • Exemplo response body
        {
            "id": 1,
            "brand": "Heygelo",
            "modelName": "S90"
            "serialNumber": "123456"
        }

busca todas as entregas do drone pelo seu ID

GET /dronefeeder/drone/{id}/deliveries

Esse endpoint retorna status 200 e todas as entregas associadas ao drone informado.

  • Exemplo response body
        [
            {
                "id": 1,
                "latitude": "-27.593500",
                "longitude": "-48.558540",
                "orderDateAndTime": "2023-03-13 07:59:38",
                "deliveryDateAndTime": "2023-04-13 11:00:00",
                "deliveryStatus": "Delivered",
                "dronefeeder": {
                    "id": 1,
                    "brand": "Heygelo",
                    "modelName": "S90",
                    "serialNumber": "1111"
                },
                "video": {
                    "id": 1,
                    "url": "https://www.youtube.com/watch?v=qcsszdkjlXg",
                    "dronefeeder": {
                        "id": 1,
                        "brand": "Heygelo",
                        "modelName": "S90",
                        "serialNumber": "1111"
                    }
                }
            },
            {
                "id": 2,
                "latitude": "-27.593501",
                "longitude": "-48.558541",
                "orderDateAndTime": "2023-03-13 09:37:23",
                "deliveryDateAndTime": "2023-04-13 11:20:00",
                "deliveryStatus": "In Transit",
                "dronefeeder": {
                    "id": 1,
                    "brand": "Heygelo",
                    "modelName": "S90",
                    "serialNumber": "1111"
                },
                "video": null
            },
         ]
    

busca todos os videos do drone pelo seu ID

GET /dronefeeder/drone/{id}/videos

Esse endpoint retorna status 200 e todas os vídeos associados ao drone informado.

  • Exemplo response body
        [
           {
               "id": 1,
               "url": "https://www.youtube.com/watch?v=qcsszdkjlXg",
               "dronefeeder": {
                   "id": 1,
                   "brand": "Heygelo",
                   "modelName": "S90",
                   "serialNumber": "1111"
               }
           },
           {
               "id": 2,
               "url": "https://www.youtube.com/watch?v=TedKIlo0c04",
               "dronefeeder": {
                   "id": 1,
                   "brand": "Heygelo",
                   "modelName": "S90",
                   "serialNumber": "1111"
               }
           }
        ]

Cria um novo drone

POST /dronefeeder/drone

Esse endpoint retorna status 200 e o Drone cadastrado.

  • Exemplo request body

        {
            "brand": "Heygelo",
            "modelName": "S90",
            "serialNumber": "123456"
        }
  • Exemplo response body

        {
            "id": 1,
            "brand": "Heygelo",
            "modelName": "S90",
            "serialNumber": "123456"
        }

Atualiza um drone pelo id

PUT /dronefeeder/drone/:id

Esse endpoint retorna status 200 e atualiza o Drone cadastrado.

  • Exemplo request body

        {
            "brand": "Neheme",
            "modelName": "NH760",
            "serialNumber": "123456"
        }
  • Exemplo response body

        {
            "id": 1,
            "brand": "Neheme",
            "modelName": "NH760",
            "serialNumber": "123456"
        }

Deleta um drone pelo id

DELETE /dronefeeder/drone/:id

Esse endpoint retorna status 200 e deleta o drone informado pelo Id.


🔶 Detalhamento dos endpoints das Deliveries

Lista todos os Deliverys

GET /dronefeeder/delivery

Esse endpoint retorna status 200 e o todos os Deliverys cadastrados.

  • Exemplo response body
         [
            {
                "id": 1,
                "latitude": "-27.593500",
                "longitude": "-48.558540",
                "orderDateAndTime": "2023-03-13 07:59:38",
                "deliveryDateAndTime": "2023-04-13 11:00:00",
                "deliveryStatus": "Delivered",
                "dronefeeder": {
                    "id": 1,
                    "brand": "Heygelo",
                    "modelName": "S90",
                    "serialNumber": "1111"
                },
                "video": {
                    "id": 1,
                    "url": "https://www.youtube.com/watch?v=qcsszdkjlXg",
                    "dronefeeder": {
                        "id": 1,
                        "brand": "Heygelo",
                        "modelName": "S90",
                        "serialNumber": "1111"
                    }
                }
            },
            {
                "id": 2,
                "latitude": "-27.593501",
                "longitude": "-48.558541",
                "orderDateAndTime": "2023-03-13 09:37:23",
                "deliveryDateAndTime": "2023-04-13 11:20:00",
                "deliveryStatus": "In Transit",
                "dronefeeder": {
                    "id": 1,
                    "brand": "Heygelo",
                    "modelName": "S90",
                    "serialNumber": "1111"
                },
                "video": null
            },
         ]

Lista o Delivery pelo id

GET /dronefeeder/delivery/:id

Esse endpoint retorna status 200 e o Delivery cadastrado.

  • Exemplo response body
            {
        "id": 1,
        "latitude": "-27.593500",
        "longitude": "-48.558540",
        "orderDateAndTime": "2023-03-13 07:59:38",
        "deliveryDateAndTime": "2023-04-13 11:00:00",
        "deliveryStatus": "Delivered",
        "dronefeeder": {
            "id": 1,
            "brand": "Heygelo",
            "modelName": "S90",
            "serialNumber": "1111"
        },
        "video": {
            "id": 1,
            "url": "https://www.youtube.com/watch?v=qcsszdkjlXg",
            "dronefeeder": {
                "id": 1,
                "brand": "Heygelo",
                "modelName": "S90",
                "serialNumber": "1111"
            }
        }
    }

Cria um novo Delivery

POST /dronefeeder/delivery

Esse endpoint retorna status 200 e o Delivery cadastrado.

  • Exemplo request body

        {
          "latitude": "-27.593500",
          "longitude": "-48.558540",
          "orderDateAndTime": "2023-03-13 07:59:38",
          "deliveryDateAndTime": "2023-04-13 11:00:00",
          "deliveryStatus": "In transit",
          "dronefeeder": {
              "id": 1,
              "brand": "Heygelo",
              "modelName": "S90",
              "serialNumber": "1111"
              }
        }
  • Exemplo response body

        {
          "id": 1,
          "latitude": "-27.593500",
          "longitude": "-48.558540",
          "orderDateAndTime": "2023-03-13 07:59:38",
          "deliveryDateAndTime": "2023-04-13 11:00:00",
          "deliveryStatus": "In transit",
          "dronefeeder": {
              "id": 1,
              "brand": "Heygelo",
              "modelName": "S90",
              "serialNumber": "1111"
          },
          "video": null
        }

Atualiza um delivery pelo id

PUT /dronefeeder/delivery/:id

Esse endpoint retorna status 200 e atualiza o Delivery cadastrado.

  • Exemplo request body

        {
          "deliveryStatus": "Delivered",
          "video": {
              "id": 1,
              "url" : "https://www.youtube.com/watch?v=qcsszdkjlXg",
              "dronefeeder": {
                "id": 1,
                "brand": "Heygelo",
                "modelName": "S90",
                "serialNumber": "1111"
              }
          }
       }
  • Exemplo response body

        {
           "id": 1,
           "latitude": "-27.593500",
           "longitude": "-48.558540",
           "orderDateAndTime": "2023-03-13 07:59:38",
           "deliveryDateAndTime": "2023-04-13 11:00:00",
           "deliveryStatus": "Delivered",
           "dronefeeder": {
               "id": 1,
               "brand": "Heygelo",
               "modelName": "S90",
               "serialNumber": "1111"
           },
           "video": {
               "id": 1,
               "url": "https://www.youtube.com/watch?v=qcsszdkjlXg",
               "dronefeeder": {
                   "id": 1,
                   "brand": "Heygelo",
                   "modelName": "S90",
                   "serialNumber": "1111"
               }
           }
        }

Deleta um Delivery pelo id

DELETE /dronefeeder/delivery/:id

Esse endpoint retorna status 200 e deleta a delivery fornecida.


🔶 Detalhamento dos endpoints dos Vídeos

Lista todos os videos

GET /dronefeeder/video

Esse endpoint retorna status 200 e o todos os Videos cadastrados.

  • Exemplo response body
         [
            {
                "id": 1,
                "url": "https://www.youtube.com/watch?v=qcsszdkjlXg",
                "dronefeeder": {
                    "id": 1,
                    "brand": "Heygelo",
                    "modelName": "S90",
                    "serialNumber": "1111"
                }
            },
            {
                "id": 2,
                "url": "https://www.youtube.com/watch?v=qcsszdkjlXg",
                "dronefeeder": {
                    "id": 1,
                    "brand": "Heygelo",
                    "modelName": "S90",
                    "serialNumber": "1111"
                }
            }
          ]
    

Lista o video pelo id

GET /dronefeeder/video/:id

Esse endpoint retorna status 200 e o Video cadastrado.

  • Exemplo response body
        {
          "id": 1,
          "url": "https://www.youtube.com/watch?v=qcsszdkjlXg",
          "dronefeeder": {
              "id": 1,
              "brand": "Heygelo",
              "modelName": "S90",
              "serialNumber": "1111"
          }
       }

Cria um novo Video

POST /dronefeeder/video

Esse endpoint retorna status 200 e o Video cadastrado.

  • Exemplo request body

           {
             "url" : "https://www.youtube.com/watch?v=qcsszdkjlXg",
             "dronefeeder": {
                   "id": 2,
                   "brand": "Deerc",
                   "modelName": "D20",
                   "serialNumber": "2222"
                 }
            }
  • Exemplo response body

        {
           "id": 2,
           "url": "https://www.youtube.com/watch?v=qcsszdkjlXg",
           "dronefeeder": {
               "id": 2,
               "brand": "Deerc",
               "modelName": "D20",
               "serialNumber": "2222"
           }
        }

Atualiza um video pelo id

PUT /dronefeeder/video/:id

Esse endpoint retorna status 200 e atualiza o Video cadastrado.

  • Exemplo request body

        {
             "url" : "https://www.youtube.com/watch?v=qcsszdkjlXggggg",
             "dronefeeder": {
                   "id": 2,
                   "brand": "Deerc",
                   "modelName": "D20",
                   "serialNumber": "2222"
                 }
            }
  • Exemplo response body

        {
           "id": 2,
           "url": "https://www.youtube.com/watch?v=qcsszdkjlXggggg",
           "dronefeeder": {
               "id": 2,
               "brand": "Deerc",
               "modelName": "D20",
               "serialNumber": "2222"
           }
        }

Deleta um Video pelo id

DELETE /dronefeeder/video/:id

Esse endpoint retorna status 200 e deleta o Video fornecido.


👥 Autores 👤

About

Delivery system associated with drone, developed in Java. Ultimate Java Acceleration Project - Group 6

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published