PUBLIC
.Diferenças do V2:visibility
(PUBLIC/PRIVATE)PUBLISHED
indica que a avaliação foi processada e está elegível para publicaçãovisibility: PRIVATE
são visíveis apenas para o parceiro, não aparecem publicamente e não afetam estatísticas públicas, ainda assim o seu status será PUBLISHED
.reply
) para uma lista (replies
), visando um diálogo mais rico entre cliente e parceiro no futuro, embora atualmente o suporte seja limitado a uma resposta do parceiro.Principais mudanças:replies
com um item)from
: MERCHANT ou CUSTOMER)NOT_REPLIED
. Após a publicação, não é possível registrar respostas.status: DISCARDED
substitui a flag discarded: true
do V1. O status INVALID
não tem correspondência direta no V1, ele é um estado interno do processo de auto moderação, mas para efeitos práticos a avaliação pode ser considerada como descartada.CREATED
: avaliação registrada e em processamento inicial.NOT_REPLIED
: avaliação com comentário, ainda sem resposta do parceiro.REPLIED
: avaliação com pelo menos uma resposta do parceiro.PUBLISHED
: avaliação publicada (elegível para visibilidade pública conforme regras).INVALID
: avaliação inválida por violação de diretrizes.DISCARDED
: avaliação descartada (ex.: fraude, política).UNKNOWN
: usado em casos raros/indeterminados.NOT_REPLIED
até que o parceiro responda.CREATED
→ NOT_REPLIED
ou PUBLISHED
.NOT_REPLIED
→ REPLIED
(ao registrar a resposta).NOT_REPLIED
e REPLIED
até a publicação; depois, PUBLISHED
, conforme regras de elegibilidade.discarded
, moderated
, moderationStatus
, reply
, published
Adicionados (V2): status
, replies
, version
, visibility
{
"page": 0,
"size": 0,
"reviews": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"score": 3.0,
"status": "PUBLISHED",
"comment": "Me iludi com a propaganda de açaí na quentinha",
"replies": [
{
"createdAt": "2025-03-11T12:50:50.668Z",
"text": "Oi, Lucca! Sentimos que sua experiência não foi a ideal. Vamos melhorar!",
"from": "MERCHANT"
}
],
"order": {
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"shortId": "1234",
"createdAt": "2025-03-11T12:05:26.916Z"
},
"surveyId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"version": "v2",
"visibility": "PUBLIC"
}
]
}
reply
virou replies
?visibility
?PUBLIC
: visível publicamente e considerada em nota.PRIVATE
: não visível publicamente e fora das estatísticas públicas.status
foi adicionado?CREATED
: avaliação registrada e em processamento inicial.NOT_REPLIED
: avaliação com comentário, ainda sem resposta do parceiro.REPLIED
: avaliação com pelo menos uma resposta do parceiro.PUBLISHED
: avaliação publicada (elegível para visibilidade pública conforme regras).INVALID
: avaliação inválida por violação de diretrizes.DISCARDED
: avaliação descartada (ex.: fraude, política).UNKNOWN
: usado em casos raros/indeterminados.version
identifica o motor que criou a avaliação (v1
ou v2
).# | Funcionalidade | Endpoint | Cenário | Descrição | Resultado esperado | Criticidade |
---|---|---|---|---|---|---|
1 | Autenticação | GET /v2/merchants/{id}/reviews | Token JWT inválido | Validar rejeição de tokens malformados | 401 UNAUTHORIZED | Máxima |
2 | Autorização | GET /v2/merchants/{id}/reviews | Token sem permissão | Validar isolamento entre merchants | 403 FORBIDDEN | Máxima |
3 | Estrutura V2 | GET /v2/merchants/{id}/reviews | Contrato V2 completo | Validar novos campos: status, replies[], version, visibility | Campos V2 presentes | Máxima |
4 | Paginação com contagem | GET /v2/merchants/{id}/reviews?addCount=true | Contagem total | Validar campos total e pageCount quando solicitados | total e pageCount populados | Alta |
5 | Campo visibility | GET /v2/merchants/{id}/reviews | Reviews públicas/privadas | Validar visibility: "PUBLIC" ou "PRIVATE" | visibility correta | Alta |
6 | Status CREATED | GET /v2/merchants/{id}/reviews | Review recém-criada | Validar status para avaliação em processamento inicial | status: "CREATED" | Alta |
7 | Status NOT_REPLIED | GET /v2/merchants/{id}/reviews | Review aguardando resposta | Validar status para review com comentário sem resposta | status: "NOT_REPLIED" | Máxima |
8 | Status REPLIED | GET /v2/merchants/{id}/reviews | Review com resposta | Validar status após parceiro responder | status: "REPLIED" | Alta |
9 | Status PUBLISHED | GET /v2/merchants/{id}/reviews | Review publicada | Validar status final após processamento | status: "PUBLISHED" | Alta |
10 | Filtros de data | GET /v2/merchants/{id}/reviews?dateFrom=2024-01-01&dateTo=2024-01-31 | Período válido | Validar filtros temporais funcionando corretamente | 200 OK com reviews filtradas | Máxima |
11 | Estrutura replies | GET /v2/merchants/{id}/reviews/{id} | Review com resposta | Validar array replies[] com from: "MERCHANT"/"CUSTOMER" | replies[0].from: "MERCHANT" | Máxima |
12 | Merchant sem reviews | GET /v2/merchants/{merchantWithoutReviews}/reviews | Cenário vazio | Validar comportamento quando merchant não tem reviews | reviews: [], total: 0 | Média |
13 | Resposta apenas NOT_REPLIED | POST /merchants/{id}/reviews/{reviewId}/answers | Tentar responder PUBLISHED | Validar que só aceita resposta em NOT_REPLIED | 422 UNPROCESSABLE ENTITY | Máxima |
14 | Validação texto resposta | POST /merchants/{id}/reviews/{reviewId}/answers | Texto 10-300 caracteres | Validar limites mantidos do V1 | 201 CREATED ou 422 | Máxima |
15 | Listagem V2 | GET /v2/merchants/{id}/reviews?page=1&pageSize=10 | Happy path | Validar funcionamento básico da listagem | 200 OK com ReviewListV2 | Máxima |
16 | Detalhes V2 | GET /v2/merchants/{id}/reviews/{reviewId} | Review existente | Validar detalhes com campos V2 completos | 200 OK com ReviewV2 | Máxima |
17 | Review inexistente | GET /v2/merchants/{id}/reviews/invalid-id | ID não encontrado | Validar tratamento de erro | 404 NOT FOUND | Alta |
18 | Page size limite | GET /v2/merchants/{id}/reviews?pageSize=51 | Limite máximo | Validar proteção de performance | 400 BAD REQUEST | Alta |