diff --git a/README.md b/README.md index 4ccb7b8..adc8ee7 100644 --- a/README.md +++ b/README.md @@ -1,322 +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 +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