Contexto
A Home (/) exibe destaques da semana e profissionais por especialidade, mas tudo vem de useProfessional() que busca /mocks/professional.json. O useUserPatient() lê de localStorage com a chamada real comentada. Os endpoints já existem no backend e os hooks Kubb estão gerados. Parte da migração descrita em #63.
Decisão de design
Manter os componentes visuais como estão (HighlightWeek, ProfessionalSection, ProfessionalCard). A migração é nos hooks de dados. Criar adapter toProfessionalCardProps() que transforma o shape da API (_id, profilePhoto, professionalSpecialties) no shape esperado pelos componentes (id, image, specialization).
Campos que a API não retorna (como price, distance, rating) serão omitidos ou exibidos como placeholder — esses dados não existem no backend ainda.
O que fazer
- Substituir
useProfessional() por hook que chama GET /search/highlightsWeek (Kubb: getSearchHighlightsweek)
- Criar segundo hook pra
GET /search/professionalBySpeciality/:speciality (Kubb: getSearchProfessionalbyspecialitySpeciality)
- Criar adapter
toProfessionalCardProps() para mapeamento de shape
- Descomentar chamada real em
useUserPatient() (api.get("/user")) e remover leitura de localStorage
- Tornar campos
price, distance, rating opcionais no ProfessionalCard
- Remover mock:
public/mocks/professional.json (se nenhum outro hook depender — senão, aguardar as outras issues de migração)
Fora de escopo
- Migrar Search, Appointments ou Addresses (issues separadas)
- Rating, reviews, preço e distância de profissionais (não existem no backend)
- Endpoint de especialidades (issue separada)
Comportamento esperado
- Ao abrir a Home,
HighlightWeek faz GET /search/highlightsWeek e renderiza até 10 cards
ProfessionalSection lê especialidades do paciente logado e faz GET /search/professionalBySpeciality/:speciality pra cada
- Se não logado, exibe seções com especialidades default
- Loading states nos cards enquanto carrega
Critérios de aceite
Stack / Restrições técnicas
Next.js 15, React Query 5, Kubb hooks. O useGetUser precisa de token — se não logado, não chamar.
Arquivos relevantes
src/features/home/components/HighlightWeek.tsx
src/features/home/components/ProfessionalSection.tsx
src/features/home/components/ProfessionalCard.tsx
src/features/home/hooks/useProfessional.ts
src/features/home/hooks/useUserPatient.ts
src/kubb/hooks/useGetSearchHighlightsweek.ts
src/kubb/hooks/useGetSearchProfessionalbyspecialitySpeciality.ts
Parte de #63
Contexto
A Home (
/) exibe destaques da semana e profissionais por especialidade, mas tudo vem deuseProfessional()que busca/mocks/professional.json. OuseUserPatient()lê de localStorage com a chamada real comentada. Os endpoints já existem no backend e os hooks Kubb estão gerados. Parte da migração descrita em #63.Decisão de design
Manter os componentes visuais como estão (
HighlightWeek,ProfessionalSection,ProfessionalCard). A migração é nos hooks de dados. Criar adaptertoProfessionalCardProps()que transforma o shape da API (_id,profilePhoto,professionalSpecialties) no shape esperado pelos componentes (id,image,specialization).Campos que a API não retorna (como
price,distance,rating) serão omitidos ou exibidos como placeholder — esses dados não existem no backend ainda.O que fazer
useProfessional()por hook que chamaGET /search/highlightsWeek(Kubb:getSearchHighlightsweek)GET /search/professionalBySpeciality/:speciality(Kubb:getSearchProfessionalbyspecialitySpeciality)toProfessionalCardProps()para mapeamento de shapeuseUserPatient()(api.get("/user")) e remover leitura de localStorageprice,distance,ratingopcionais noProfessionalCardpublic/mocks/professional.json(se nenhum outro hook depender — senão, aguardar as outras issues de migração)Fora de escopo
Comportamento esperado
HighlightWeekfazGET /search/highlightsWeeke renderiza até 10 cardsProfessionalSectionlê especialidades do paciente logado e fazGET /search/professionalBySpeciality/:specialitypra cadaCritérios de aceite
useUserPatient()busca da API realStack / Restrições técnicas
Next.js 15, React Query 5, Kubb hooks. O
useGetUserprecisa de token — se não logado, não chamar.Arquivos relevantes
src/features/home/components/HighlightWeek.tsxsrc/features/home/components/ProfessionalSection.tsxsrc/features/home/components/ProfessionalCard.tsxsrc/features/home/hooks/useProfessional.tssrc/features/home/hooks/useUserPatient.tssrc/kubb/hooks/useGetSearchHighlightsweek.tssrc/kubb/hooks/useGetSearchProfessionalbyspecialitySpeciality.tsParte de #63