igorsmasc / moveisbattle

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Desafio Let's code

Este é código do desafio para professor da let's code

Descrição

Crie uma API REST para uma aplicação ao estilo card game, onde serão informados dois filmes e o jogador deve acertar aquele que possui melhor avaliação no IMDB.

Requisitos

  1. O jogador deve fazer login para iniciar uma nova partida. Portanto, cada partida sempre será identificada pela autenticação do usuário. a. Não há restrições onde armazenar os usuários: em memória, ou em banco, etc.
  • Para o primeiro requisito eu decidir utilizar o banco H2 e o spring security para autenticar os usuários.
  1. Cada rodada do jogo consiste em informar um par de filmes, observando para não repetir o mesmo par nem formar um par com um único filme. a. São sequências não-válidas: [A-A] o mesmo filme repetido; [A-B, A-B] pares repetidos – considere iguais os pares do tipo A-B e B-A. b. Os seguintes pares são válidos: [A-B, B-C] o filme B é usado em pares diferentes.
  • Para o segundo requisito, adicionei na entidade Game uma lista com um hash dos ultimos jogos, sendo assim sempre que for gerada uma nova combinação de filmes para aquele Game e ela já existir uma nova combinação será gerada.
  1. O jogador deve tentar acertar qual filme possui maior pontuação, composta pela nota (0.0-10.0) multiplicado pelo total de votos.

  2. Se escolher o vencedor correto, conta 1 ponto. São permitidos até três erros. Após responder, terá acesso a novo par de filmes quando acessar o endpoint do quiz.

  3. Forneça endpoints específicos para iniciar e encerrar a partida a qualquer momento. Valide o momento em que cada funcionalidade pode ser acionada.

  4. Não deve ser possível avançar para o próximo par sem responder o atual.

  5. Deve existir uma funcionalidade de ranking, exibindo os melhores jogadores e suas pontuações.

  • Para o terceiro requisito foi adicionado o endpoint de ranking que recebe como paramentro um tamanho. Ex: Se receber o valor 10, irá retornar o top 10.
  1. A pontuação é obtida multiplicando a quantidade de quizzes respondidos pela porcentagem de acerto.

Não-Funcionais

  1. Armazene os dados em H2 e preencha todas as tabelas necessárias.
  2. Inicie os dados de sua aplicação usando webscraping ou a partir da API pública “http://www.omdbapi.com/” – levamos a sério que os dados sejam fidedignos.
  3. Explore os frameworks Spring: Web, Boot, Data, Security e Cloud.
  4. Linguagem: Java 11 ou 17
  5. Escreva testes unitários (para validar as regras de negócio) e de integração (para validar a API). Cobertura de testes mínima: 80% dos métodos.
  6. Não deixe de adicionar a documentação da API com base no OpenAPI 3.0.
  7. Escolha a solução de autenticação que achar mais interessante. Crie pelo menos dois usuários/jogadores.

Como Jogar

Passo 01 - Login

  • Para poder jogar é necessário realizar o login. Para testes existem dois usuários.
  • login01: ana@mail.com - senha01: ana | login02: pedro@mail.com - senha02: pedro

Passo 02 - Start Game

  • Para iniciar um novo jogo é necessário chamar o endpoint start e o game será associado ao id do usuário.
  • Ao iniciar o game você receberá o primeiro par de filmes
## Request
 
- Endpoint: 
{uri}/api/start

## Exemplo de response

{
    "questionId": "349",
    "gameId": "3",
    "movie01": {
        "id": "4",
        "imdbId": "tt3397884",
        "title": "Sicario"
    },
    "movie02": {
        "id": "9",
        "imdbId": "tt10986410",
        "title": "Ted Lasso"
    }
}

Passo 03 - Guess

  • Com essa response iremos montar o body do nosso palpite (guess), onde devemos inserir o Id do Game, os Ids dos dois filmes e um palpite com o Id do filme escolhido. A cada palpite será retornado uma nova questão. Caso o jogador erre 3 vezes o jogo passará a ser inválido.
## Request
 
- Endpoint: 
{uri}/api/guess

- Body:
    {
        "gameId": "3", 
        "movie01": "10",
        "movie02": "8",
        "guess": "1"
    }

## Exemplo de response se o jogo ainda for válido (não houver 3 erross)

{
    "lastGuessResult": "You was right!",
    "points": 1,
    "lastQuestion": {
        "questionId": "4310",
        "gameId": "4",
        "movie01": {
            "id": "3",
            "imdbId": "tt3076658",
            "title": "Creed"
        },
        "movie02": {
            "id": "10",
            "imdbId": "tt11126994",
            "title": "Arcane"
        }
    },
    "gameId": "4"
}

## Exemplo de response após o 3 erro

{
    "points": 1,
    "gameStatus": "Game Over!",
    "lastQuestionId": "495",
    "gameId": "4"
}

Passo 04 - Stop/Game Over

  • A qualquer momento o usuário pode chamar o endpoint stop para invalidar/encerrar o jogo.

License

MIT

About


Languages

Language:Java 100.0%