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.
Apache Maven 3.6.3
Java 11.0.18
docker version 23.0.2
docker-compose version 2.4.1
MySQL version 5.7
- Clone o repositório
[email protected]: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
.
- Verifique se as portas 3306 e 8080 estão disponíveis com os respectivos comandos
sudo lsof -i :3306
etelnet 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 comandomvn spring-boot:run
.
- Rode o comando
mvn test
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
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
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
- Uma entrega pode estar associada a um drone
- Um drone pode ter várias entregas associadas
- Uma vídeo está associado somente a um drone
- Um drone pode ter vários vídeos associados
- Uma entrega está associado somente a um 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" } ]
Esse endpoint retorna status 200
e o Drone cadastrado.
- Exemplo
response body
{ "id": 1, "brand": "Heygelo", "modelName": "S90" "serialNumber": "123456" }
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 }, ]
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" } } ]
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" }
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" }
Esse endpoint retorna status 200
e deleta o drone informado pelo Id.
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 }, ]
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" } } }
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 }
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" } } }
Esse endpoint retorna status 200
e deleta a delivery fornecida.
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" } } ]
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" } }
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" } }
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" } }
Esse endpoint retorna status 200
e deleta o Video fornecido.