Skip to content

Latest commit

 

History

History
149 lines (128 loc) · 10 KB

README.md

File metadata and controls

149 lines (128 loc) · 10 KB

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.