R-003 — Histórico de filiações do app lista apenas filiações pagas
TLDR:
GET /api/v2/user/membershipslista somente filiações compayment_status = "paid". Filiaçõespending,overdueerefundednão aparecem no histórico exibido no app. A ordenação segue porvalid_untildecrescente.
Given / When / Then
Dado um usuário com uma filiação paga e outra filiação não paga (pending, overdue ou refunded)
Quando GET /api/v2/user/memberships é chamado para esse usuário
Então a resposta contém apenas a filiação paga, ordenada por valid_until decrescente — a não paga é omitida, mesmo quando a vigência dela é mais recente
Tabela de decisão
payment_status da filiação |
Aparece em GET /api/v2/user/memberships |
|---|---|
paid |
Sim |
pending |
Não |
overdue |
Não |
refunded |
Não |
Restrições
- A filtragem usa o scope existente
Membership.paid— não duplicar a condição depayment_statusno controller. - A ordenação por
valid_until DESCé preservada. - Usuário sem nenhuma filiação paga recebe
200com lista vazia ([]) — o endpoint de listagem não retorna404. GET /api/v2/user/memberships/current(show) não é afetado: continua resolvendo a filiação viaUser#current_membership, que tem fallback para a filiação mais recente independente de pagamento.
Código
app/controllers/api/v2/memberships_controller.rb — index
ruby
memberships = @current_user_apolo.memberships.paid.order(valid_until: :desc)
Teste vinculado
test/controllers/api/v2/memberships_controller_test.rb — “index should list only paid memberships”