commit 00ddca90b85698e5c391c2a29d47b459c9d5aadf Author: Kate_santos Date: Fri May 15 02:37:52 2026 +0000 Enviar arquivos para "/" diff --git a/README.md b/README.md new file mode 100644 index 0000000..4ccb7b8 --- /dev/null +++ b/README.md @@ -0,0 +1,322 @@ +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