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.
- Construção da API - Java e Quarkus
- Banco de dados - MySQL
- ORM - Hibernate ORM with Panache
- Testes - JUnit 5 e Testcontainers
- Cobertura de testes - JaCoCo Java Code Coverage Library
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.
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
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.
👾 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"
}