Skip to content

Repositório com os requisitos do desafio de conclusão do curso Spring WebFlux

License

Notifications You must be signed in to change notification settings

didifive/reactive-bingo

 
 

Repository files navigation

Repository language count Repository language count GitHub last commit Made by Didi Repository license

Desafio do curso Spring WebFlux

Criar uma API de jogo de Bingo usando as seguintes tecnologias:

technology Java technology MongoDB technology Spring Webflux technology Docker

Requisitos

  • Gerenciar as informações dos jogadores (CRUD) com um find on demand;
  • Gerar as cartelas de uma rodada com os números aleatórios, regras:
    • Todas as cartelas geradas devem ter quantidades iguais de números;
    • A cartela deve ter 20 números;
    • Uma cartela pode ter no máximo 1/4 dos mesmos números de uma outra cartela;
    • as cartelas da rodada só podem ser geradas antes de começar o sorteio dos números;
  • Possibilidade de vincular uma cartela ao jogador ( 1 jogador só pode ser vinculado á uma cartela por rodada);
  • Guardar um histórico das rodadas com os números sorteados, regras:
    • Cada rodada pode sortear números de 0 até 99;
    • Guardar os números sorteados;
    • Guardar as cartelas que pertencem a ela;
    • Guardar os jogadores que participaram;
  • Endpoint para sortear o próximo número da rodada (um número não pode ser sorteado 2x na mesma rodada);
  • Endpoint para buscar o último número sorteado;
  • Cada vez que um número é sorteado deve-se verificar se alguma cartela já completou todos os números, caso tenha completado a rodada deve ser encerrada (bloquear geração de novos números) e um e-mail deve ser enviado ao vencedor da partida e os outros jogadores devem receber um e-mail mostrando como eles se sairam;
  • Endpoint para buscar todas as rodadas (find all) o find on demand fica como opcional;
  • Endpoint para buscar informações de uma partida pelo identificador
  • Dockerizar a aplicação (opcional);
  • Montar documentação dos endpoints (opcional);

Requisitos de testes

  • Os testes devem contemplar controller, services e repositórios que não são interfaces

Dicas

Sugestão de endpoints:

  • Jogadores:
    • save (POST /players)
    • update (PUT /players/{id})
    • delete (DELETE /players/{id)
    • find by id (GET /players/{id})
    • find on demand (GET /players)
  • Rodada:
    • criar rodada (POST /rounds)
    • gerar número (POST /rounds/{id}/generate-number)
    • buscar ultimo número sorteado (GET /rounds/{id}/current-number)
    • gerar cartela (POST /rounds/{id}/bingo-card/{playerId})
    • buscar rodadas (GET /rounds)
    • buscar rodada pelo id (GET /rounds/{id})

💯 Reactive Bingo by Luis Zancanela

As informações acima são para o desafio, abaixo estarão as informações do projeto conforme desenvolvido para cumprir o desafio lançado.

🧱 Configuração

O projeto foi feito utilizando:

  • IDE IntelliJ IDEA Community Edition 2022.1.1.
  • Iniciado com Spring Initializr com as configurações e dependências:
    • Project: Gradle Project
    • Language: Java
    • Spring Boot 2.7.5
    • Packaging: Jar
    • Java 17
    • Dependencies:
      • Spring Data Reactive MongoDB
      • Embedded MongoDB Database (para teste)
      • Spring Reactive Web
      • Java Mail Sender
      • Validation
      • Lombok
      • Mapstruct
      • OpenApi
      • Thymeleaf

🖌 Visuais

Logotipo do projeto:
Reactive Bingo Logo
Banner do Spring personalizado:
Spring Banner personalizado
Diagrama de Classes UML:
UML Class Diagram
OpenApi - Swagger:
OpenApi - Swagger
Postman Collection:
Postman Collection
Mail Catcher:
Mail Catcher
E-mail para ganhador:
E-mail para ganhador
E-mail para ganhador rodapé
E-mail para perdedor:
E-mail para perdedor
Cobertura de testes realizada pelo IntelliJ:
Cobertura de testes IntelliJ
Cobertura de testes pelo plugin do Jacoco:
Cobertura de testes Jacoco

💾 Instalação

Clonar ou fazer download deste repositório.
Possuir docker e docker compose instalados. Se não possui, siga este tutorial de como Instalar Docker CE no Linux Ubuntu. Neste tutorial tem passo de como instalar o WSL para utilizar o Linux no Windows 10.

👨‍💻 Uso

No terminal verifique se o serviço do docker está rodando e utilize o comando:

docker compose -f docker-compose-dev.yml up

Ao executar o comando acima, o docker irá montar os containers com as imagens de Gradle, JDK17, MongoDB e MailCatcher.
Após a aplicação terminar o início, é possível acessar o Swagger pelo endereço: http://localhost:8080/reactive-bingo/swagger-ui.html.
Para conferir emails gerados e enviados pelo sistema, utilize o MailCatcher disponível no endereço: http://localhost:1080

📡 Endpoints

🙋‍♂ Players (Jogadores):

Método URL
POST http://localhost:8080/reactive-bingo/players
GET http://localhost:8080/reactive-bingo/players
GET http://localhost:8080/reactive-bingo/players/{id}
PUT http://localhost:8080/reactive-bingo/players/{id}
DELETE http://localhost:8080/reactive-bingo/players/{id}

🎰 Rounds (Rodadas):

Método URL
POST http://localhost:8080/reactive-bingo/rounds
GET http://localhost:8080/reactive-bingo/rounds
GET http://localhost:8080/reactive-bingo/rounds/{id}
POST http://localhost:8080/reactive-bingo/rounds/{id}/cards/generate/{playerId}
GET http://localhost:8080/reactive-bingo/rounds/{id}/cards/get/{playerId}
POST http://localhost:8080/reactive-bingo/rounds/{id}/draw-number
GET http://localhost:8080/reactive-bingo/rounds/{id}/last-number

❤ Feito por Luis Carlos Zancanela 🚀
☎ Dúvida, sugestão ou problema é só entrar em contato.

Releases

No releases published

Packages

No packages published

Languages

  • Java 99.3%
  • Other 0.7%