Este repositório contém o código-fonte e a documentação para o Tech Challenge - Fase 4, desenvolvido pelo Grupo 30.
O projeto consiste em uma aplicação web para exibição de videos utilizando Spring Framework, Spring WebFlux, Spring Boot e Sping Data. A API permite gerenciamento de videos, usuários e principalmnente o streaming the videos utilizando endpoints reativos.
Tecnologias e ferramentas utilizadas
-
Linguagem de programação:
- Java 17
-
Framework:
- Spring Boot 3.2.0
-
Bibliotecas:
- Spring Web
- Spring WebFlux
- OpenAPI
- Lombok
- AWS Java SDK
-
Tests:
- JUnit
- JMockit
-
Banco de dados:
- MongoDB
-
Outras ferramentas:
- Docker
Configuração de produção utilizando o MongoDB
O schema e os dados iniciais do banco de dados são criados através do arquivo schema.js:
tech-challenge-fase4/schema.js
Lines 1 to 62 in e97832c
Criamos um container para aplicação e outro para o banco de dados e uma rede no modo bridge para ter acesso ao containers via localhost:
Também adicionamos o arquivo Dockerfile que gerencia o processo de build da aplicação através do Maven e JDK, já inicializando a aplicação:
tech-challenge-fase4/Dockerfile
Lines 1 to 19 in f88aa52
Para criação dos container, compilar e rodar a applicação é necessário apenas o comando:
tech-challenge-fase4/docker-compose.yml
Lines 1 to 28 in f88aa52
docker-compose up -d
Adicionamos a geração automática da documentação através da biblioteca SpringDoc OpenAPI, a documentação pode ser acessada enquanto a aplicação estiver rodando em http://localhost:8080/swagger-ui/index.html#/:
Disponibilizamos um conjunto de arquivos JSON com todas as requisições Postman para testar a API, os arquivos estão disponíveis nos seguintes links:
https://github.com/rcsim/tech-challenge-fase4/blob/main/src/main/resources/postman/Category.postman_collection.json https://github.com/rcsim/tech-challenge-fase4/blob/main/src/main/resources/postman/Statistics.postman_collection.json https://github.com/rcsim/tech-challenge-fase4/blob/main/src/main/resources/postman/Users.postman_collection.json https://github.com/rcsim/tech-challenge-fase4/blob/main/src/main/resources/postman/Videos.postman_collection.json https://github.com/rcsim/tech-challenge-fase4/blob/main/src/main/resources/postman/Stream.postman_collection.json
Utilizando as bibliotecas JUnit e JMockit, implementamos os testes de unidade, chegando a 93% de cobertura das classes do sistema:
Para testes de integração utilizamos o Postman:
Para gerenciar vídeos de forma eficiente, utilizamos o Amazon S3 para armazenamento e o AWS Java SDK para facilitar a interação com o S3. Os vídeos são enviados e organizados em buckets no S3, aproveitando sua escalabilidade e durabilidade. O AWS Java SDK simplifica a integração, proporcionando uma maneira fácil e segura de baixar vídeos para transmissão. A combinação dessas tecnologias garante uma recuperação eficiente dos vídeos armazenados, permitindo uma experiência de transmissão suave e confiável. A segurança é mantida por meio de políticas de controle de acesso, garantindo a proteção dos vídeos armazenados no S3.
O projeto foi concluído com êxito, atendendo integralmente aos requisitos propostos no desafio. A escolha criteriosa das tecnologias e ferramentas desempenhou um papel fundamental, proporcionando um ambiente propício para o desenvolvimento eficiente e robusto do sistema. Destaca-se o enfoque dedicado à implementação de endpoints reativos com Spring WebFlux, constituindo o principal ponto de aprendizado nesta etapa. Vale ressaltar que, devido à novidade desse paradigma para alguns membros do grupo, foram necessários esforços adicionais para assimilação e aplicação efetiva.
As principais dificuldades encontradas estão relacionadas à incorporação do protocolo HLS para o streaming de vídeos e à hospedagem destes na AWS S3. Conforme mencionado anteriormente, o paradigma de programação reativa também se configurou como um ponto de atenção, dada sua novidade para parte dos integrantes. Essas questões exigiram uma abordagem cuidadosa e estratégica para superação, demonstrando a capacidade do grupo em lidar com desafios complexos.