/drone-feeder

This Java project is a REST API for a delivery system that uses Drones to transport packages.

Primary LanguageJava

drone-feeder

O Drone-Feeder é uma API REST para um sistema de entregas utilizando Drones.
A API permite gerenciar os drones e as entregas exibindo informações como posição geográfica onde será entregue o pacote(latitude e longitude), data e horário da entrega, seu status (criada, em rota, finalizada e cancelada) e o link do vídeo do momento em que o pacote foi recebido.
Todas essas informações são armazenadas em um banco de dados MySQL.

🔍 Tecnologias utilizadas

📋 Execute o projeto em sua máquina com docker em dev mode

Clone o repositório:

git clone git@github.com:tamireshc/Java.git

Crie um container MySQL com Docker iniciando o banco drone_feeder

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=drone_feeder -d  mysql:latest

Execute

./mvnw compile quarkus:dev

*As migrations pré definidas serão executadas automaticamente criando as tabelas do projeto.

🕵 Diagrama UML da API

Drone Feeder drawio

🧪 Executando os testes

Inicie o banco MySQL com Docker iniciando o banco drone_feeder

docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=drone_feeder -d  mysql:latest

Rode os testes:

./mvnw test

🎯 Cobertura dos testes

Após rodar os testes procure os resultados na pasta target/jacoco-report
O arquivo index.html estará com o resumo do resultado obtido.

Os testes deste projeto contemplaram uma cobertura de 95% da linhas.

Captura de Tela 2023-08-04 às 18 23 38

🔎 Documentação da API

👾 Drones
  • Cadastro de drone
  POST /drone
Parâmetro Tipo Descrição
model string modelo do drone.
brand string marca do drone.

Corpo da resposta:

{
  "brand": "DJI",
  "id": 1,
  "model": "Mavic 3 Pro"
}

✅ STATUS 201 Created

  • Atualizar drone
  PATCH /drone/:id
Parâmetro Tipo Descrição
model string modelo do drone.
brand string marca do drone.

Corpo da resposta:

{
  "brand": "DJI",
  "id": 1,
  "model": "Mavic 3 Pro"
}

✅ STATUS 200 OK

  • Obter todos os drones
  GET /drone

Corpo da resposta:

[
  {
  	"brand": "DJIx",
  	"id": 1,
  	"model": "Mavic 3 Pro"
  }
]

✅ STATUS 200 OK

  • Obter um drone por seu id
  GET /drone/:id

Corpo da resposta:

  {
  	"brand": "DJIx",
  	"id": 1,
  	"model": "Mavic 3 Pro"
  }

✅ STATUS 200 OK

  • Deletar um drone por seu id
  DELETE /drone/:id

Corpo da resposta:

Drone Deleted

✅ STATUS 200 OK

📼 Vídeos
  • Cadastro de vídeo
  POST /video
Parâmetro Tipo Descrição
link string link do vídeo.

Corpo da resposta:

{
  "id": 1,
  "link": "http://video.com"
}

✅ STATUS 201 Created

  • Obter todos os vídeos
  GET /video

Corpo da resposta:

[
  {
  	"id": 1,
  	"link": "http://video.com"
  },
  {
  	"id": 2,
  	"link": "https://video.com"
  }
]

✅ STATUS 200 OK

  • Obter um vídeo por seu id
  GET /video/:id

Corpo da resposta:

{
  "id": 1,
  "link": "http://video.com"
}

✅ STATUS 200 OK

📬 Deliveries
  • Cadastro de entrega
  POST /delivery
Parâmetro Tipo Descrição
status string status da entrega - "CREATED".
droneId string Drone que será utilizado na entrega.
schedule_delivery string data agendada da entrega no formato - "dd/MM/yyyy-HH:mm".
position objeto posição da entrega composto de latitude e longitude

Corpo da resposta:

{
  "status": "CREATED",
  "droneId": 1,
  "schedule_delivery": "25/05/2023-16:34",
  "position": {
  	"latitude": "40",
  	"longitude": "50"
  }
}

✅ STATUS 201 Created

  • Atualizar uma entrega
  PATCH /delivery/:id

** Qualquer um dos parametros pode ser atualizado de acordo com a necessidade

Parâmetro Tipo Descrição
status string status da entrega - "CREATED".
droneId string Drone que será utilizado na entrega.
schedule_delivery string data agendada da entrega no formato - "dd/MM/yyyy-HH:mm".
position objeto posição da entrega composto de latitude e longitude

Corpo da resposta:

{
  "delivery_date": "2023-08-08T17:40:14.203344",
  "drone": {
  	"brand": "DJI",
  	"id": 1,
  	"model": "Mavic 3 Pro"
  },
  "id": 1,
  "position": {
  	"id": 1,
  	"latitude": "40",
  	"longitude": "50"
  },
  "schedule_delivery": "2023-05-25T16:34:00",
  "status": "FINISHED",
  "video": {
  	"id": 2,
  	"link": "https://video.com"
  }
}

✅ STATUS 200 OK

  • Atualizar o status de uma entrega
  PATCH /delivery/status/:id
Parâmetro Tipo Descrição
status string status da entrega .

Corpo da resposta:

{
  "status": "CANCELED"
}

✅ STATUS 200 OK

  • Obter todos as entregas
  GET /delivery

Corpo da resposta:

[
  {
  	"drone": {
  		"brand": "DJI",
  		"id": 1,
  		"model": "Mavic 3 Pro"
  	},
  	"id": 1,
  	"position": {
  		"id": 1,
  		"latitude": "40",
  		"longitude": "50"
  	},
  	"schedule_delivery": "2023-05-25T16:34:00",
  	"status": "CREATED"
  }
]

✅ STATUS 200 OK

  • Deletar um entrega por seu id
  DELETE /delivery/:id

Corpo da resposta:

Delivery Deleted

✅ STATUS 200 OK

❌ Casos de Falhas
  • Ao atualizar, deletar e buscar por id para um drone inexistente deve emitir a exceção NotFoundException

    ⚠️ STATUS 404 - Not Found
{
   "message": "Drone not found"
}
  • Ao atualizar, deletar e buscar por id para um video inexistente deve emitir a exceção NotFoundException

    ⚠️ STATUS 404 - Not Found
{
   "message": "Video not found"
}
  • Ao atualizar o status de uma entrega para um valor diferente de "CANCELED", "ONROUTE", "FINISHED" ou "CANCELED" deve emitir a exceção StatusNotAllowedException

    ‼️ STATUS 405 - Method Not Allowed
{
   "message": "Status not allowed"
}
  • Ao atualizar, deletar e buscar por id para uma entrega inexistente deve emitir a exceção NotFoundException

    ⚠️ STATUS 404 - Not Found
{
"message": "Delivery not found"
}