Faixa etária do terapeuta (exibição na PDP)
TLDR: Adiciona um campo
age_rangeao perfil do terapeuta para que a faixa etária atendida (crianças, adulto, idoso) seja exibida na PDP.
Contexto
Queremos exibir na PDP do terapeuta a(s) faixa(s) etária(s) atendida(s) por ele (crianças, adulto, idoso), como um array serializado em user_profiles, validado contra uma constante de valores permitidos.
Esta entrega contempla apenas a exibição da faixa etária na PDP. Os fluxos reais de configuração dessa informação (seleção no onboarding do terapeuta, edição e definição de visibilidade no perfil) não fazem parte deste escopo e serão implementados depois, em outra entrega. O endpoint de escrita criado aqui só existe para permitir popular dados de teste manualmente enquanto o frontend testa a exibição do GET — ele não é chamado por nenhum fluxo de onboarding ou perfil ainda.
Objetivos
- Criar uma constante de valores válidos de faixa etária
- Expor a faixa etária na PDP do terapeuta (
GET /api/v1/terapeuta/:slug) - Permitir escrever a faixa etária pelo endpoint de atualização de perfil (
PATCH/PUT /api/v1/me/profile), sem nenhum side-effect novo (sem aprovação de step de onboarding, sem sincronização comSearchTherapist/busca) - Não alterar nenhum outro fluxo (onboarding, publicação de perfil, busca de terapeutas)
Fora de escopo
app/use_cases/user_profiles/update_by_user.rb— nenhum hookafternovo;age_rangenão aprova nenhum step de onboardingsearch_therapists— sem coluna nova, sem sincronização, sem filtro de buscaconfig/routes.rb— nenhuma rota nova; reaproveitaPATCH/PUT /api/v1/me/profile- Onboarding e perfil do terapeuta (UI, edição, visibilidade)
Mudanças
db/migrate/XXXXXXXXXXXXXX_add_age_range_to_user_profiles.rb— nova colunaage_range:textemuser_profilesconfig/initializers/trg.rb— nova constanteAGE_RANGES = ["Crianças", "Adulto", "Idoso"]app/models/user_profile.rb:serialize :age_range, type: Arrayvalidates :age_range, inclusion: {in: AGE_RANGES, message: "não é uma opção válida."}
app/use_cases/user_profiles/update_by_user_validation.rb— adicionar:age_rangeaoattr_accessore ao hash deprofile_attributesapp/controllers/api/v1/users_profiles_controller.rb— adicionarage_range: ToArray.call(params[:user_profile].as_json["age_range"])ao merge deprofile_paramsapp/serializers/therapist_serializer.rb— adicionar:age_rangeaosattributes(é o que a PDP expõe)app/serializers/user_profile_serializer.rb— adicionar:age_rangeaosattributes(para oGET /api/v1/me/profiletambém refletir o valor salvo)spec/factories/user_profiles.rb— adicionarage_range { ["Adulto"] }na factory base eage_range { nil }no trait:blank
Plano de implementação
- test: model —
UserProfilevalidaage_rangecontraAGE_RANGES(caso válido e inválido) —spec/models/user_profile_spec.rb - test: request —
PATCH /api/v1/me/profileaceitaage_rangee persiste —spec/requests/api/v1/user_profiles_update_spec.rb - test: request —
GET /api/v1/terapeuta/:slugretornaage_rangeno body —spec/requests/api/v1/therapists_show_spec.rb - feat: migration + constante
AGE_RANGES+ model (serialize/validates) - feat: use case de update (
UpdateByUserValidation) + controller (UsersProfilesController#profile_params) - feat: serializers (
TherapistSerializer,UserProfileSerializer) + factory
Cada passo commitado isoladamente, com testes verdes antes de avançar. Sem fase de refactor: ou perf: previstas — a mudança é aditiva e de baixa complexidade.
Como verificar
make test test=spec/models/user_profile_spec.rbmake test test=spec/requests/api/v1/user_profiles_update_spec.rbmake test test=spec/requests/api/v1/therapists_show_spec.rb- Manual:
PATCH /api/v1/me/profilecom{"user_profile": {"age_range": ["Adulto", "Idoso"]}}autenticado como terapeuta, depoisGET /api/v1/terapeuta/:slugdo mesmo terapeuta, confirmando queage_rangeaparece no body — o frontend usa esse GET para testar a exibição na PDP
Documentação
Nenhuma mudança de documentação necessária — mudança apenas aditiva e de exibição. Os fluxos de configuração real (onboarding/perfil), que vão gerar documentação de regra de negócio, serão tratados na entrega futura.