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: ```json 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: ```json 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: ```json 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 ``` ```json { "idUsuario": 581, "idJogo": 123, "nota": 5, "comentario": "Review do usuário" } ``` #### Exemplos de Resposta: ```json 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 ``` ```json { "nota": 5, "comentario": "Review do usuário atualizado" } ``` #### Exemplos de Resposta: ```json 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: ```json 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: ```json 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