2026-05-15 02:37:52 +00:00
2026-05-15 02:37:52 +00:00

Nome do microsserviço: Reviews e avaliações

Integrantes

Kate

Descrição do Microsserviço:

O microsserviço de Reviews e Avaliações é responsável por gerenciar todas as avaliações feitas pelos usuários sobre os jogos disponíveis na plataforma GameVerse. Ele permite que usuários registrem notas e comentários, podendo também editar e excluir comentários sobre jogos que estão na biblioteca.

Responsabilidades do Microsserviço:

  • Receber e armazenar avaliações (nota+comentários) feitas por usuários dos jogos
  • Garantir que cada usuário avalie o jogo apenas uma vez
  • Fornecer dados da avaliação para o Laravel Central e para os microsserviços de jogos
  • Garantir que o usuário que vai avaliar esteja logado no sistema (Gameverse)

Tecnologias Utilizadas:

  • NodeJS + Express
  • PostgreSQL

Requisitos Necessários Para Rodar o Projeto:

  • NodeJS 20 ou mais recente
  • PostgreSQL 14 ou mais recente

Passo a Passo da Instalação

  1. Clone o projeto
  2. Execute o comando npm install na raiz do projeto

Configuração do .env

Em construção. Parâmetros a serem definidos de acordo com a implementação do projeto

Como Executar o Projeto

  1. Execute o comando npm start na raiz do projeto

Como Testar o Projeto

  1. Execute o comando npm test na raiz do projeto

Rotas da API

| Metodo | Rota | Descrição | | ------ | ------------------------------------ | -------------------------------------- -- | | GET | /api/v1/reviews | Lista reviews de acordo com o filtro | | GET | /api/v1/reviews/jogo/{id_jogo} | Lista os reviews de um jogo | | GET | /api/v1/reviews/jogo/{id_jogo}/media | Retorna a nota média de um jogo | | GET | /api/v1/reviews/{id_review} | Retorna um review específico pelo id | | POST | /api/v1/reviews | Cria um review | | PUT | /api/v1/reviews/{id_review} | Edita um review | | DELETE | /api/v1/reviews/{id_review} | Remove um review |

Detalhamento das Rotas

GET /api/v1/reviews

Descrição

Lista reviews de acordo com os filtros aplicados. Retorna resultados paginados.

Parâmetros de Consulta (Query String):

  1. id_jogo (Opcional): Filtra comentários por ID do jogo
  2. id_usuario (Opcional): Filtra comentários por ID do usuário
  3. pagina (Opcional): Página atual
  4. tamanho_pagina (Opcional): Número de itens retornados por página

Exemplo de Requisição

GET http://localhost/api/v1/reviews?id_usuario=581&pagina=3&tamanho_pagina=20

Exemplo de Resposta:

200 OK

{
    "total": 412,
    "itens": [
        {
            "idReview": 101,
            "idUsuario": 581,
            "idJogo": 123,
            "nota": 5,
            "nomeUsuario": "John Doe",
            "dataCriacao": "2026-05-14T00:00:00.000Z",
            "comentario": "Review do usuário"
        },
        {
            "idReview": 102,
            "idUsuario": 581,
            "idJogo": 133,
            "nota": 4,
            "nomeUsuario": "John Doe",
            "dataCriacao": "2026-05-14T00:00:00.000Z",
            "comentario": "Review do usuário"
        }
    ]
}

GET /api/v1/reviews/jogo/{id_jogo}

Descrição

Lista os reviews de um jogo. Retorna resultados paginados.

Parâmetros de Consulta (Query String):

  1. pagina (Opcional): Página atual
  2. tamanho_pagina (Opcional): Número de itens retornados por página

Exemplo de Requisição

GET http://localhost/api/v1/reviews/jogo/123?pagina=3&tamanho_pagina=20

Exemplo de Resposta:

200 OK

{
    "total": 309,
    "itens": [
        {
            "idReview": 101,
            "idUsuario": 581,
            "idJogo": 123,
            "nota": 5,
            "nomeUsuario": "John Doe",
            "dataCriacao": "2026-05-14T00:00:00.000Z",
            "comentario": "Review do usuário"
        },
        {
            "idReview": 102,
            "idUsuario": 925,
            "idJogo": 123,
            "nota": 4,
            "nomeUsuario": "Jane Doe",
            "dataCriacao": "2026-05-14T00:00:00.000Z",
            "comentario": "Review do usuário"
        }
    ]
}

GET /api/v1/reviews/{id_review}

Descrição

Retorna um único review por ID

Parâmetros da URL:

  1. id_review: ID do review

Exemplo de Requisição

GET http://localhost/api/v1/reviews/101

Exemplo de Resposta:

200 OK

{
    "idReview": 101,
    "idUsuario": 581,
    "idJogo": 123,
    "nota": 5,
    "nomeUsuario": "John Doe",
    "dataCriacao": "2026-05-14T00:00:00.000Z",
    "comentario": "Review do usuário"
}

POST /api/v1/reviews

Descrição

Cria um review

Exemplo de Requisição

POST http://localhost/api/v1/reviews
{
    "idUsuario": 581,
    "idJogo": 123,
    "nota": 5,
    "comentario": "Review do usuário"
}

Exemplos de Resposta:

200 OK

{
    "idReview": 101,
    "idUsuario": 581,
    "idJogo": 123,
    "nota": 5,
    "nomeUsuario": "John Doe",
    "dataCriacao": "2026-05-14T00:00:00.000Z",
    "comentario": "Review do usuário"
}

409 CONFLICT

{
    "sucesso": false,
    "mensagem": "O usuário já realizou um review deste jogo"
}

PUT /api/v1/reviews/{id_review}

Descrição

Edita um review

Parâmetros da URL:

  1. id_review: ID do review

Exemplo de Requisição

PUT http://localhost/api/v1/reviews/101
{
    "nota": 5,
    "comentario": "Review do usuário atualizado"
}

Exemplos de Resposta:

200 OK

{
    "idReview": 101,
    "idUsuario": 581,
    "idJogo": 123,
    "nota": 5,
    "nomeUsuario": "John Doe",
    "dataCriacao": "2026-05-14T00:00:00.000Z",
    "comentario": "Review do usuário atualizado"
}

DELETE /api/v1/reviews/{id_review}

Descrição

Remove um review

Parâmetros da URL:

  1. id_review: ID do review

Exemplo de Requisição

DELETE http://localhost/api/v1/reviews/101

Exemplos de Resposta:

200 OK

{
    "sucesso": true
}

GET /api/v1/reviews/jogo/{id_jogo}/media

Descrição

Retorna a nota média de um jogo

Parâmetros da URL:

  1. id_jogo: ID do jogo

Exemplo de Requisição

GET http://localhost/api/v1/reviews/jogo/123/media

Exemplos de Resposta:

200 OK

{
    "media": 4.5,
    "numeroAvaliacoes": 2849
}

200 OK

{
    "media": null,
    "numeroAvaliacoes": 0
}

Explicação das Integrações com Outros Microsserviços:

  • O Laravel Central será responsável por rotear todas as rotas com início /api/v1/reviews para este microsserviço.
  • O Laravel Central será responsável pela autenticação e emissão do bearer token.
  • O Microsserviço de Reviews fará a autorização checando a assinatura do bearer token.
  • O Microsserviço de Reviews fará comunicação com o microsserviço de Usuário para obter dados como o nome.

Fluxo principal do serviço:

  1. Usuário acessa a página de um jogo no Frontend
  2. Frontend solicita ao Laravel Central os dados do jogo
  3. Laravel Central consulta o Microsserviço de Jogos
  4. Laravel Central consulta o Microsserviço de Reviews → GET /reviews/jogo/{id}/media
  5. Laravel Central monta a resposta completa e envia ao Frontend
  6. Usuário decide avaliar o jogo e submete nota + comentário
  7. Frontend envia POST para o Laravel Central
  8. Laravel Central repassa para o Microsserviço de Reviews → POST /reviews
  9. Reviews valida o user_id no Microsserviço de Usuários
  10. Reviews valida o game_id no Microsserviço de Jogos
  11. Se válidos: salva a avaliação no banco de dados
  12. Retorna confirmação ao Laravel Central → Frontend → Usuário
Description
No description provided
Readme 28 KiB