Atualizar README.md

This commit is contained in:
2026-05-15 02:39:45 +00:00
parent 00ddca90b8
commit c8f6d9d3aa

644
README.md
View File

@@ -1,322 +1,322 @@
Nome do microsserviço: Reviews e avaliações Nome do microsserviço: Reviews e avaliações
=========================================== ===========================================
## Integrantes ## Integrantes
Kate Kate
## Descrição do Microsserviço: ## 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. 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: ## Responsabilidades do Microsserviço:
* Receber e armazenar avaliações (nota+comentários) feitas por usuários dos jogos * 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 * 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 * 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) * Garantir que o usuário que vai avaliar esteja logado no sistema (Gameverse)
## Tecnologias Utilizadas: ## Tecnologias Utilizadas:
* NodeJS + Express * NodeJS + Express
* PostgreSQL * PostgreSQL
## Requisitos Necessários Para Rodar o Projeto: ## Requisitos Necessários Para Rodar o Projeto:
* NodeJS 20 ou mais recente * NodeJS 20 ou mais recente
* PostgreSQL 14 ou mais recente * PostgreSQL 14 ou mais recente
## Passo a Passo da Instalação ## Passo a Passo da Instalação
1. Clone o projeto 1. Clone o projeto
2. Execute o comando ```npm install``` na raiz do projeto 2. Execute o comando ```npm install``` na raiz do projeto
## Configuração do .env ## Configuração do .env
Em construção. Parâmetros a serem definidos de acordo com a implementação do projeto Em construção. Parâmetros a serem definidos de acordo com a implementação do projeto
## Como Executar o Projeto ## Como Executar o Projeto
1. Execute o comando ```npm start``` na raiz do projeto 1. Execute o comando ```npm start``` na raiz do projeto
## Como Testar o Projeto ## Como Testar o Projeto
1. Execute o comando ```npm test``` na raiz do projeto 1. Execute o comando ```npm test``` na raiz do projeto
## Rotas da API ## Rotas da API
| Metodo | Rota | Descrição | | Metodo | Rota | Descrição |
| ------ | ------------------------------------ | -------------------------------------- -- | | ------ | ------------------------------------ | ---------------------------------------- |
| GET | /api/v1/reviews | Lista reviews de acordo com o filtro | | 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} | 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/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 | | GET | /api/v1/reviews/{id_review} | Retorna um review específico pelo id |
| POST | /api/v1/reviews | Cria um review | | POST | /api/v1/reviews | Cria um review |
| PUT | /api/v1/reviews/{id_review} | Edita um review | | PUT | /api/v1/reviews/{id_review} | Edita um review |
| DELETE | /api/v1/reviews/{id_review} | Remove um review | | DELETE | /api/v1/reviews/{id_review} | Remove um review |
## Detalhamento das Rotas ## Detalhamento das Rotas
### GET /api/v1/reviews ### GET /api/v1/reviews
#### Descrição #### Descrição
Lista reviews de acordo com os filtros aplicados. Lista reviews de acordo com os filtros aplicados.
Retorna resultados paginados. Retorna resultados paginados.
#### Parâmetros de Consulta (Query String): #### Parâmetros de Consulta (Query String):
1. **id_jogo (Opcional)**: Filtra comentários por ID do jogo 1. **id_jogo (Opcional)**: Filtra comentários por ID do jogo
2. **id_usuario (Opcional)**: Filtra comentários por ID do usuário 2. **id_usuario (Opcional)**: Filtra comentários por ID do usuário
3. **pagina (Opcional)**: Página atual 3. **pagina (Opcional)**: Página atual
4. **tamanho_pagina (Opcional)**: Número de itens retornados por página 4. **tamanho_pagina (Opcional)**: Número de itens retornados por página
#### Exemplo de Requisição #### Exemplo de Requisição
``` ```
GET http://localhost/api/v1/reviews?id_usuario=581&pagina=3&tamanho_pagina=20 GET http://localhost/api/v1/reviews?id_usuario=581&pagina=3&tamanho_pagina=20
``` ```
#### Exemplo de Resposta: #### Exemplo de Resposta:
```json ```json
200 OK 200 OK
{ {
"total": 412, "total": 412,
"itens": [ "itens": [
{ {
"idReview": 101, "idReview": 101,
"idUsuario": 581, "idUsuario": 581,
"idJogo": 123, "idJogo": 123,
"nota": 5, "nota": 5,
"nomeUsuario": "John Doe", "nomeUsuario": "John Doe",
"dataCriacao": "2026-05-14T00:00:00.000Z", "dataCriacao": "2026-05-14T00:00:00.000Z",
"comentario": "Review do usuário" "comentario": "Review do usuário"
}, },
{ {
"idReview": 102, "idReview": 102,
"idUsuario": 581, "idUsuario": 581,
"idJogo": 133, "idJogo": 133,
"nota": 4, "nota": 4,
"nomeUsuario": "John Doe", "nomeUsuario": "John Doe",
"dataCriacao": "2026-05-14T00:00:00.000Z", "dataCriacao": "2026-05-14T00:00:00.000Z",
"comentario": "Review do usuário" "comentario": "Review do usuário"
} }
] ]
} }
``` ```
### GET /api/v1/reviews/jogo/{id_jogo} ### GET /api/v1/reviews/jogo/{id_jogo}
#### Descrição #### Descrição
Lista os reviews de um jogo. Lista os reviews de um jogo.
Retorna resultados paginados. Retorna resultados paginados.
#### Parâmetros de Consulta (Query String): #### Parâmetros de Consulta (Query String):
1. **pagina (Opcional)**: Página atual 1. **pagina (Opcional)**: Página atual
2. **tamanho_pagina (Opcional)**: Número de itens retornados por página 2. **tamanho_pagina (Opcional)**: Número de itens retornados por página
#### Exemplo de Requisição #### Exemplo de Requisição
``` ```
GET http://localhost/api/v1/reviews/jogo/123?pagina=3&tamanho_pagina=20 GET http://localhost/api/v1/reviews/jogo/123?pagina=3&tamanho_pagina=20
``` ```
#### Exemplo de Resposta: #### Exemplo de Resposta:
```json ```json
200 OK 200 OK
{ {
"total": 309, "total": 309,
"itens": [ "itens": [
{ {
"idReview": 101, "idReview": 101,
"idUsuario": 581, "idUsuario": 581,
"idJogo": 123, "idJogo": 123,
"nota": 5, "nota": 5,
"nomeUsuario": "John Doe", "nomeUsuario": "John Doe",
"dataCriacao": "2026-05-14T00:00:00.000Z", "dataCriacao": "2026-05-14T00:00:00.000Z",
"comentario": "Review do usuário" "comentario": "Review do usuário"
}, },
{ {
"idReview": 102, "idReview": 102,
"idUsuario": 925, "idUsuario": 925,
"idJogo": 123, "idJogo": 123,
"nota": 4, "nota": 4,
"nomeUsuario": "Jane Doe", "nomeUsuario": "Jane Doe",
"dataCriacao": "2026-05-14T00:00:00.000Z", "dataCriacao": "2026-05-14T00:00:00.000Z",
"comentario": "Review do usuário" "comentario": "Review do usuário"
} }
] ]
} }
``` ```
### GET /api/v1/reviews/{id_review} ### GET /api/v1/reviews/{id_review}
#### Descrição #### Descrição
Retorna um único review por ID Retorna um único review por ID
#### Parâmetros da URL: #### Parâmetros da URL:
1. **id_review**: ID do review 1. **id_review**: ID do review
#### Exemplo de Requisição #### Exemplo de Requisição
``` ```
GET http://localhost/api/v1/reviews/101 GET http://localhost/api/v1/reviews/101
``` ```
#### Exemplo de Resposta: #### Exemplo de Resposta:
```json ```json
200 OK 200 OK
{ {
"idReview": 101, "idReview": 101,
"idUsuario": 581, "idUsuario": 581,
"idJogo": 123, "idJogo": 123,
"nota": 5, "nota": 5,
"nomeUsuario": "John Doe", "nomeUsuario": "John Doe",
"dataCriacao": "2026-05-14T00:00:00.000Z", "dataCriacao": "2026-05-14T00:00:00.000Z",
"comentario": "Review do usuário" "comentario": "Review do usuário"
} }
``` ```
### POST /api/v1/reviews ### POST /api/v1/reviews
#### Descrição #### Descrição
Cria um review Cria um review
#### Exemplo de Requisição #### Exemplo de Requisição
``` ```
POST http://localhost/api/v1/reviews POST http://localhost/api/v1/reviews
``` ```
```json ```json
{ {
"idUsuario": 581, "idUsuario": 581,
"idJogo": 123, "idJogo": 123,
"nota": 5, "nota": 5,
"comentario": "Review do usuário" "comentario": "Review do usuário"
} }
``` ```
#### Exemplos de Resposta: #### Exemplos de Resposta:
```json ```json
200 OK 200 OK
{ {
"idReview": 101, "idReview": 101,
"idUsuario": 581, "idUsuario": 581,
"idJogo": 123, "idJogo": 123,
"nota": 5, "nota": 5,
"nomeUsuario": "John Doe", "nomeUsuario": "John Doe",
"dataCriacao": "2026-05-14T00:00:00.000Z", "dataCriacao": "2026-05-14T00:00:00.000Z",
"comentario": "Review do usuário" "comentario": "Review do usuário"
} }
409 CONFLICT 409 CONFLICT
{ {
"sucesso": false, "sucesso": false,
"mensagem": "O usuário já realizou um review deste jogo" "mensagem": "O usuário já realizou um review deste jogo"
} }
``` ```
### PUT /api/v1/reviews/{id_review} ### PUT /api/v1/reviews/{id_review}
#### Descrição #### Descrição
Edita um review Edita um review
#### Parâmetros da URL: #### Parâmetros da URL:
1. **id_review**: ID do review 1. **id_review**: ID do review
#### Exemplo de Requisição #### Exemplo de Requisição
``` ```
PUT http://localhost/api/v1/reviews/101 PUT http://localhost/api/v1/reviews/101
``` ```
```json ```json
{ {
"nota": 5, "nota": 5,
"comentario": "Review do usuário atualizado" "comentario": "Review do usuário atualizado"
} }
``` ```
#### Exemplos de Resposta: #### Exemplos de Resposta:
```json ```json
200 OK 200 OK
{ {
"idReview": 101, "idReview": 101,
"idUsuario": 581, "idUsuario": 581,
"idJogo": 123, "idJogo": 123,
"nota": 5, "nota": 5,
"nomeUsuario": "John Doe", "nomeUsuario": "John Doe",
"dataCriacao": "2026-05-14T00:00:00.000Z", "dataCriacao": "2026-05-14T00:00:00.000Z",
"comentario": "Review do usuário atualizado" "comentario": "Review do usuário atualizado"
} }
``` ```
### DELETE /api/v1/reviews/{id_review} ### DELETE /api/v1/reviews/{id_review}
#### Descrição #### Descrição
Remove um review Remove um review
#### Parâmetros da URL: #### Parâmetros da URL:
1. **id_review**: ID do review 1. **id_review**: ID do review
#### Exemplo de Requisição #### Exemplo de Requisição
``` ```
DELETE http://localhost/api/v1/reviews/101 DELETE http://localhost/api/v1/reviews/101
``` ```
#### Exemplos de Resposta: #### Exemplos de Resposta:
```json ```json
200 OK 200 OK
{ {
"sucesso": true "sucesso": true
} }
``` ```
### GET /api/v1/reviews/jogo/{id_jogo}/media ### GET /api/v1/reviews/jogo/{id_jogo}/media
#### Descrição #### Descrição
Retorna a nota média de um jogo Retorna a nota média de um jogo
#### Parâmetros da URL: #### Parâmetros da URL:
1. **id_jogo**: ID do jogo 1. **id_jogo**: ID do jogo
#### Exemplo de Requisição #### Exemplo de Requisição
``` ```
GET http://localhost/api/v1/reviews/jogo/123/media GET http://localhost/api/v1/reviews/jogo/123/media
``` ```
#### Exemplos de Resposta: #### Exemplos de Resposta:
```json ```json
200 OK 200 OK
{ {
"media": 4.5, "media": 4.5,
"numeroAvaliacoes": 2849 "numeroAvaliacoes": 2849
} }
200 OK 200 OK
{ {
"media": null, "media": null,
"numeroAvaliacoes": 0 "numeroAvaliacoes": 0
} }
``` ```
## Explicação das Integrações com Outros Microsserviços: ## 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 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 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á 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. * 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: ## Fluxo principal do serviço:
1. Usuário acessa a página de um jogo no Frontend 1. Usuário acessa a página de um jogo no Frontend
2. Frontend solicita ao Laravel Central os dados do jogo 2. Frontend solicita ao Laravel Central os dados do jogo
3. Laravel Central consulta o Microsserviço de Jogos 3. Laravel Central consulta o Microsserviço de Jogos
4. Laravel Central consulta o Microsserviço de Reviews → GET /reviews/jogo/{id}/media 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 5. Laravel Central monta a resposta completa e envia ao Frontend
6. Usuário decide avaliar o jogo e submete nota + comentário 6. Usuário decide avaliar o jogo e submete nota + comentário
7. Frontend envia POST para o Laravel Central 7. Frontend envia POST para o Laravel Central
8. Laravel Central repassa para o Microsserviço de Reviews → POST /reviews 8. Laravel Central repassa para o Microsserviço de Reviews → POST /reviews
9. Reviews valida o user_id no Microsserviço de Usuários 9. Reviews valida o user_id no Microsserviço de Usuários
10. Reviews valida o game_id no Microsserviço de Jogos 10. Reviews valida o game_id no Microsserviço de Jogos
11. Se válidos: salva a avaliação no banco de dados 11. Se válidos: salva a avaliação no banco de dados
12. Retorna confirmação ao Laravel Central → Frontend → Usuário 12. Retorna confirmação ao Laravel Central → Frontend → Usuário