Atualizar README.md
This commit is contained in:
644
README.md
644
README.md
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user