R-012 — Busca pública devolve uma filiação por terapeuta

TLDR: Membership.search devolve no máximo uma filiação por terapeuta — a ativa de maior valid_until.

Given / When / Then

Dado uma terapeuta com filiação vigente e renovação já aprovada, ambas ativas Quando a busca pública (GET /api/v2/therapist/search/:term) é chamada Então ela aparece em um único resultado, representada pela filiação de maior valid_until; a paginação conta terapeutas, não filiações

Restrições

  • O critério é valid_until DESC, não created_at DESC: “o registro mais novo” deixa de representar a pessoa quando existe renovação antecipada.
  • O colapso (DISTINCT ON (user_id)) vai numa subquery de ids dentro de where(id: ...) — é o que mantém o total_count do Kaminari contando terapeutas.
  • O scope active não mudou: quem aparece na busca continua sendo o mesmo conjunto de antes.
  • O card (active_current) sai do mesmo scope, então passa a exibir a vigência da filiação escolhida.

Código

app/models/membership.rb — scope :search

Teste vinculado

test/controllers/api/v2/therapist_controller_test.rb — “should return one result per therapist…”, “should represent the therapist by the membership with the furthest validity”, “should keep one result for each distinct therapist…”