R-003 — Histórico de filiações do app lista apenas filiações pagas

TLDR: GET /api/v2/user/memberships lista somente filiações com payment_status = "paid". Filiações pending, overdue e refunded não aparecem no histórico exibido no app. A ordenação segue por valid_until decrescente.

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 de payment_status no controller.
  • A ordenação por valid_until DESC é preservada.
  • Usuário sem nenhuma filiação paga recebe 200 com lista vazia ([]) — o endpoint de listagem não retorna 404.
  • GET /api/v2/user/memberships/current (show) não é afetado: continua resolvendo a filiação via User#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”