Drone Feeder é uma API de armazenamento de informações relativas a entregas e drones, além de servir como um ponto de comunicação entre um front-end e múltiplos drones, onde é possível:
- Criar, buscar, atualizar e remover uma entrega;
- Criar, buscar, atualizar e remover um drone;
- Associar um drone a múltiplas entregas;
- Enviar, baixar e listar videos de entrega; e
- Associar um vídeo do drone a uma entrega.
Este projeto foi desenvolvido como um desafio final da Aceleração em Java na Trybe em parceria com a Wipro.
- Contexto
- Tecnologias utilizadas
- Dependências
- Como rodar a aplicação
- Como rodar os testes
- Documentação da API
- Próximos passos
- Autores
A empresa "FutuereH" conseguiu uma nova patente que permitirá a entrega de pacotes com drones. Isso mesmo: o futuro já chegou para FutuereH! Com essa patente registrada, a empresa tem ao todo três meses para iniciar os testes. Sua equipe é responsável por montar o serviço Back-end, que vai fornecer informações aos drones.
Depois de muitas discussões entre os arquitetos e o CTO da empresa, o Back-end foi batizado como Drone Feeder. A Stack escolhida para a criação dele foi a linguagem Java, o banco de dados MySQL, e tudo deve rodar em containers Docker.
A arquitetura da parte do sistema em que o Drone Feeder vai atuar foi entregue à sua equipe pelo CTO e seus arquitetos com o seguinte desenho:
Confome visto, o Drone Feeder será uma aplicação REST em que um sistema Front-end vai exibir algumas informações dos drones, tais como latitude e longitude, data e horário da entrega ou retirada do pacote. Essas informações serão armazenadas no banco de dados MySQL.
O drone, por sua vez, sincronizará informações com o Drone Feeder sempre que ele tiver uma conexão com a internet. O drone ainda vai informar se a entrega foi efetuada junto a data, horário e vídeo gravado do momento da entrega.
O CTO da FutuereH confia muito na sua equipe e deu liberdade para eventuais melhorias e modificações na arquitetura proposta.
- Ferramentas: Slack, VS Code, IntelliJ, Maven, Git e GitHub.
- Linguagem: Java.
- Frameworks, bibliotecas e plugins: Spring Boot, Spring Web, Spring Data JPA, Spring Boot Dev Tools, JUnit, CheckStyle e JaCoCo.
- Banco de dados: MySQL e H2 (somente nos testes).
Você precisará de Git, Docker e Docker Compose instalados em sua máquina para executar a aplicação.
- No terminal, clone o repositório:
git clone https://github.com/felipemalli/drone-feeder.git
- Entre na pasta do repositório clonado:
cd drone-feeder
- Inicialize a aplicação com Docker Compose:
docker compose up
- Na primeira execução, a inicialização da aplicação pode levar alguns minutos. Aguarde até que apareça a mensagem:
api | 2022-10-20 03:58:19.613 INFO 48 --- [ restartedMain] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
api | 2022-10-20 03:58:19.618 INFO 48 --- [ restartedMain] i.g.n.d.DroneFeederApplication : Started DroneFeederApplication in 0.892 seconds (JVM running for 497.837)
- Com a aplicação já em execução, execute no terminal:
docker compose exec api mvn test
- Ao final da execução, o resultado dos testes será exibido.
- Para gerar o code coverage dos testes, execute:
mvn jacoco:report
- Por fim, abra em um navegador o arquivo do diretório
target/site/jacoco/index.html
para visualizar o code coverage.
POST /drone
Parâmetro | Tipo | Descrição |
---|---|---|
null |
null |
Não é obrigatório |
GET /drone
Parâmetro | Tipo | Descrição |
---|---|---|
null |
null |
Não é obrigatório |
GET /drone/{id}
Parâmetro | Tipo | Descrição |
---|---|---|
id |
long |
Obrigatório. O ID do item que você quer |
PUT /drone/{id}
Parâmetro | Tipo | Descrição |
---|---|---|
id |
long |
Obrigatório. O ID do item que você quer |
DELETE /drone/{id}
Parâmetro | Tipo | Descrição |
---|---|---|
id |
long |
Obrigatório. O ID do item que você quer |
POST /
Parâmetro | Tipo | Descrição |
---|---|---|
null |
null |
Não é obrigatório |
GET /
Parâmetro | Tipo | Descrição |
---|---|---|
null |
null |
Não é obrigatório |
PUT /{id}
Parâmetro | Tipo | Descrição |
---|---|---|
id |
long |
Obrigatório. O ID do item que você quer |
PUT /{id}/{droneId}
Parâmetro | Tipo | Descrição |
---|---|---|
id, droneId |
long |
Obrigatório. O ID do item que você quer |
DELETE /{id}
Parâmetro | Tipo | Descrição |
---|---|---|
id |
long |
Obrigatório. O ID do item que você quer |
GET /video
Parâmetro | Tipo | Descrição |
---|---|---|
null |
null |
Não é obrigatório |
POST video/upload/delivery/{deliveryId}
Parâmetro | Tipo | Descrição |
---|---|---|
deliveryId |
file |
Obrigatório. O video que você quer |
GET /download/{id}
Parâmetro | Tipo | Descrição |
---|---|---|
id |
long |
Obrigatório. O ID do item que você quer |
-
Deploy
-
Implementar o Front-End
-
Swagger
-
Implementar arquitetura de microsserviços
Felipe Vahia |
Natã Elienai |
Raphael |
---|