Joaquim Poe em Spring Boot
A pedido da audiência, portar Joaquim Poe para Spring Boot é exercício de camadas, endpoints e testes mínimos — não só 'mesma feature'.
Por que Spring Boot
Nesta parte do material sobre joaquim poe spring boot, o foco é «Por que Spring Boot». Em vez de teoria genérica, o raciocínio parte do que acontece quando você executa de verdade.
Vocês pediram e eu resolvi desenvolver o Joaquim Poe na versão do Spring Boot. E eu estava dando uma olhada no nosso último projeto, no nosso último desenvolvimento do Joaquim Poe, que eu vou colocar o card aqui em cima, se eu lembrar, que eu consigo reaproveitar toda a lógica, todo o código e criar apenas um controlador. Se a gente for abrir aquele projetinho do Joaquim Po, a gente tinha uma classe, que era um enum, na verdade, jogada, onde possuía um método que é o vence de, então pedra vence de tesoura, papel vence de pedra e tesoura vence de papel.
Eu tinha um player, que seria a representação do jogador. Então aqui teria o nome do player, a jogada que ele está fazendo, escolher jogada e os métodos GETs tradicionais do encapsulamento. Então a classe Game tinha uns métodos que é a jogada do computador, que ele faria um random para o computador escolher a sua própria jogada.
O que portar do projeto anterior
Nesta parte do material sobre joaquim poe spring boot, o foco é «O que portar do projeto anterior». Em vez de teoria genérica, o raciocínio parte do que acontece quando você executa de verdade.
O set jogada jogador que faria a jogada do jogador, que setava a escolha do jogador. E nós teríamos um método main aqui que faria todo o teste e usaria as classes aqui de controller para implementar a regra do jogo. E com Spring Boot não vai ser tão diferente, porque eu vou reaproveitar basicamente quase tudo.
Para ficar algo bem simples, eu posso criar um controller, que é a única classe que nós não temos. Então eu posso chamar de gameController.java, que vai conter os endpoints, que vai ser o REST. O model são as classes que basicamente nós já temos, o game.java, o jogada.java e o player.java.
Na prática
Reimplementar Joaquim Poe em Spring Boot a pedido da audiência.
Camadas e endpoints
Nesta parte do material sobre joaquim poe spring boot, o foco é «Camadas e endpoints». Em vez de teoria genérica, o raciocínio parte do que acontece quando você executa de verdade.
E nós teríamos os DTOs porque eu sempre gosto de criar DTO então eu teria um jogada request para receber a jogada via endpoint eu teria um resultado response que retornaria o resultado de quem venceu aquela jogada né aquela rodada e aqui eu teria a main class né então a main.java para rodar o nosso servidor aqui com Tomcat, com Spring Boot. Então, esse tipo de arquitetura já me resolveria para implementar o desafio com o Spring Boot. E para isso, pessoal, eu criei um projetinho com o Spring Initializer, eu chamei de Joken, e eu adicionei essas dependências aqui que vão facilitar a minha vida, que é o Spring Web, para fazer a camada de RESTful, o Lombok, para não demorar tanto, o Spring Boot DevTools, perfeito?
E vou começar aqui a montar o esqueleto, que é aquilo que eu fiz no Excalibur. Então aqui o primeiro pacote que eu vou criar vai ser o Controller. Eu vou criar um outro pacotinho que vai ser o DTO e eu acho que isso é o suficiente e daí eu vou começar a copiar de um projeto para o outro certo?
Testes mínimos
Nesta parte do material sobre joaquim poe spring boot, o foco é «Testes mínimos». Em vez de teoria genérica, o raciocínio parte do que acontece quando você executa de verdade.
Então a primeira coisa que eu vou fazer é copiar os nossos models que já está tipo tudo pronto, deixa eu dar o close aqui então vamos lá, eu vou pegar primeiro o jogada que é o nosso enum, então copy e vou jogar aqui para dentro do model pronto, está aqui a minha jogadinha agora eu vou pegar o player então copy venho para cá jogo aqui e por último eu vou pegar o game então copy opa coloque show Show de bola. E eu vou criar duas variáveis para contar as vitórias de cada um. Então, se o jogador venceu, eu vou vir aqui e vou marcar um mais mais para ele.
E se o computador venceu, eu vou dar um mais mais aqui para ele também. E eu vou criar um método aqui que vai retornar o is finalizado perfeito show de bola agora vou começar a criar os de teus os de teus vai ser o que eu vou trafegar então vou criar aqui uma classe que vou chamar de jogada request pronto aqui o que que vai ter essa jogada request pessoal simplesmente a jogada então private a jogada jogada vai ter o get jogada e o site jogada pronto isso aqui beleza daí eu vou criar um outro aqui que vai ser o resultado response esse resultado responsa eu vou botar algumas métricas aqui para melhor entendimento para quem for jogar o nosso jogo então Eu vou criar uma string que eu vou chamar de resultado da rodada, porque pode ser um empate, né? Eu vou criar, como o player que vai jogar, eu vou criar uma variável que vai retornar a jogada do computador que ele fez.
Sinais de que está funcionando
Nesta parte do material sobre joaquim poe spring boot, o foco é «Sinais de que está funcionando». Em vez de teoria genérica, o raciocínio parte do que acontece quando você executa de verdade.
Então, eu sou o Matheus, eu vou jogar o meu joguinho, eu vou fazer uma chamada para o meu endpoint e ele vai me retornar o que o jogador jogou para eu saber se o jogo está certo, né? E eu vou criar aqui exatamente o Vitória jogador para devolver que mais o Vitória do computador que mais eu vou criar a variável booleana para ver se está finalizado eu vou chamar de pode ser assim É. Não vai me sugerir a criação do construtor agora, o IntelliJ?
Depois qualquer coisa a gente faz uma adequação né e agora por último vamos criar aqui a classe que vai ser o game controller pronto simples assim que eu vou fazer essa camada vai ser um resto controller beleza ela vai ter um request mapping onde eu vou definir uma rotina aqui pra ela que vai ser o barra api barra joga joga em pó pode ser eu vou criar uma variável de instância aqui private final do nosso game que eu vou chamar de jogo e já vou instanciar ele, pronto que ele já me sugeriu um post mapping, eu vou criar um eu mesmo então Deixa eu só dar vários enters porque a minha tela é pequenininha. Um padrãozinho e agora que vai vir a lógica né então se meu jogo. Foi finalizado eu já posso dar um return para ele do new response result response onde eu vou colocar uma mensagem o jogo já terminou jogado jogador vou botar nulo as vitórias né vai ser jogo.get eu não queria os gets não Então eu vou vir aqui no meu game de novo.
O que evitar na primeira semana
Nesta parte do material sobre joaquim poe spring boot, o foco é «O que evitar na primeira semana». Em vez de teoria genérica, o raciocínio parte do que acontece quando você executa de verdade.
Tem que criar os gets, get vitórias computador, get vitórias jogador, dessas variáveis de controle aqui. Então, aqui eu vou pegar get vitórias jogador, jogo.vitórias computador, que é mais true e o resultado, ponto e vírgula, isso aqui. Se ele não foi finalizado, daí a gente vai fazer o joguinho, né?
Jogada jogador vai ser o request.get jogada jogo.7 a não é só jogada computador é jogada computador para o computador fazer a jogada dele então é o nosso rendon e aqui a gente vai pegar o resultado né então vou criar um variável Zinho aqui é resultado rodada é igual a jogo. Resultado Oi e aqui eu dou o resultado responsa é isso aqui ó aqui é eu posso fazer o seguinte ó se o jogo foi finalizado então esse cara né senão eu posso botar nulo porque pode ser que deu empate certo é pode ser porque daqui mostra o jogo terminou aqui eu boto empate é isso aí perfeito tá feito é assim que funciona o jovem pô no spring boot então que eu pensei né óbvio tu pode fazer muito mais elaborado do que eu sou criar aqui deixa eu rodar essa aplicação Zinha é Beleza, está rodando. Eu vou pegar aqui e criar um arquivinho que é o HTTP request, que eu vou chamar de request.
Como explicar isso para o time
Nesta parte do material sobre joaquim poe spring boot, o foco é «Como explicar isso para o time». Em vez de teoria genérica, o raciocínio parte do que acontece quando você executa de verdade.
Isso aqui vai simular o postman para mim, então eu vou dar um post no HTTP. Localhost vamos tirar tudo isso aqui localhost 8080 barra API como é que eu chamei a jockempor jockempor jogar meu Deus jogar aqui eu vou botar um content type que vai ser o application.json E aqui eu vou colocar aqui o. Jogada eu vou escolher aqui pedra e vou dar o play e aqui deu o que é internal server erro cannot invoke cannot invoke então vim aqui um cadê ele deu erro aqui no ele disse que ele não pôde chamar aqui o meu método do escolher jogada, ele não pôde então a gente vai ver isso aqui agora, aqui aqui ele veio deixa eu minimizar aqui, jogo não está finalizado e ele vai pegar o jogo.set jogada jogador, ah esse variável que está nula porque eu tirei o construtor né Então aqui eu já vou criar É porque aqui eu já vou criar o player Jogador, new player, computador Pronto, isso aqui já vai nos resolver Vamos lá, vamos rodar a aplicação de novo Entendeu?
Agora vamos rodar aqui Vamos escolher o pedra ainda Mais um probleminha Que ele deu not Vamos ver agora. Beleza, vamos lá Post, beleza Isso aí, então tá, terminou aqui Jogador venceu, eu venci A jogada do computador foi tesoura Como eu coloquei pedra, uma vitória Para o jogador, zero para o computador O jogador venceu e Finalizado, true Então é isso pessoal Deixa eu trocar a perspectiva Eu espero que vocês tenham entendido, eu espero que vocês tenham gostado. Vou jogar mais algumas vezes e eu vou colocar o código desse Jockey Empower também no meu GitHub.
Na prática
Próximo passo: escolha uma métrica (taxa de sucesso, tempo, retries ou conversão) e rode um experimento de 7 dias antes de escalar o padrão.