discarded → substituído por status: DISCARDEDmoderated → não existe mais moderação préviamoderationStatus → substituído por statusreply → substituído por replies (array)published → substituído por status: PUBLISHEDstatus → ciclo de vida completo da avaliaçãoreplies → array preparado para múltiplas respostasversion → identifica versão do motor (v1/v2)visibility → controle de visibilidade (PUBLIC/PRIVATE){
"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"
}
]
}| Funcionalidade | Endpoint | Cenário | Descrição | Resultado esperado |
|---|---|---|---|---|
| Estrutura V2 | GET /v2/merchants/{id}/reviews | Contrato V2 completo | Validar novos campos: status, replies[], version, visibility | Campos V2 presentes |
| Paginação com contagem | GET /v2/merchants/{id}/reviews?addCount=true | Contagem total | Validar campos total e pageCount quando solicitados | total e pageCount populados |
| Campo visibility | GET /v2/merchants/{id}/reviews | Reviews públicas/privadas | Validar visibility: "PUBLIC" ou "PRIVATE" | visibility correta |
| Status CREATED | GET /v2/merchants/{id}/reviews | Review recém-criada | Validar status para avaliação em processamento inicial | status: "CREATED" |
| Status NOT_REPLIED | GET /v2/merchants/{id}/reviews | Review aguardando resposta | Validar status para review com comentário sem resposta | status: "NOT_REPLIED" |
| Status REPLIED | GET /v2/merchants/{id}/reviews | Review com resposta | Validar status após parceiro responder | status: "REPLIED" |
| Status PUBLISHED | GET /v2/merchants/{id}/reviews | Review publicada | Validar status final após processamento | status: "PUBLISHED" |
| 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 |
| Estrutura replies | GET /v2/merchants/{id}/reviews/{id} | Review com resposta | Validar array replies[] com from: "MERCHANT"/"CUSTOMER" | replies[0].from: "MERCHANT" |
| Merchant sem reviews | GET /v2/merchants/{merchantWithoutReviews}/reviews | Cenário vazio | Validar comportamento quando merchant não tem reviews | reviews: [], total: 0 |
| Resposta apenas NOT_REPLIED | POST /merchants/{id}/reviews/{reviewId}/answers | Tentar responder PUBLISHED | Validar que só aceita resposta em NOT_REPLIED | 422 UNPROCESSABLE ENTITY |
| Validação texto resposta | POST /merchants/{id}/reviews/{reviewId}/answers | Texto 10-300 caracteres | Validar limites mantidos do V1 | 201 CREATED ou 422 |
| Listagem V2 | GET /v2/merchants/{id}/reviews?page=1&pageSize=10 | Happy path | Validar funcionamento básico da listagem | 200 OK com ReviewListV2 |
| Detalhes V2 | GET /v2/merchants/{id}/reviews/{reviewId} | Review existente | Validar detalhes com campos V2 completos | 200 OK com ReviewV2 |
| Review inexistente | GET /v2/merchants/{id}/reviews/invalid-id | ID não encontrado | Validar tratamento de erro | 404 NOT FOUND |
| Page size limite | GET /v2/merchants/{id}/reviews?pageSize=51 | Limite máximo | Validar proteção de performance | 400 BAD REQUEST |
reply virou replies?replies com um único itemvisibility?| Valor | Descrição |
|---|---|
PUBLIC | Visível publicamente e considerada no cálculo de nota da loja |
PRIVATE | Visível apenas para o parceiro, não afeta estatísticas públicas |
status?| Status | Descrição |
|---|---|
CREATED | Registrada e em processamento inicial |
NOT_REPLIED | Com comentário, aguardando resposta do parceiro |
REPLIED | Com pelo menos uma resposta do parceiro |
PUBLISHED | Publicada e elegível para visibilidade pública |
INVALID | Inválida por violação de diretrizes |
DISCARDED | Descartada (fraude, política ou expiração) |
UNKNOWN | Estado indeterminado (raro) |
version?v1 → criada pela versão legadav2 → criada pela versão atualversion para distinguir a origemversion: "v1"version: "v2"| V1 | V2 | Observação |
|---|---|---|
discarded: true | status: DISCARDED | Lógica booleana virou enum |
moderationStatus | status | Estados mais granulares |
reply | replies[0].text | String virou array de objetos |
| N/A | replies[0].from | Campo novo identifica origem |
| N/A | visibility | Campo novo controla visibilidade |
| N/A | version | Campo novo identifica versão |
discarded por verificação de statusreply → replies[0].textvisibilityversion se necessário