Contexto
Os hooks de agendamentos (useAppointments, useAppointmentDetail, useCancelAppointment) buscam de /mocks/appointments.json e /mocks/appointmentDetails.json. O cancelamento simula um delay de 1200ms. As chamadas reais estão comentadas no código. Os endpoints GET /appointments/me, GET /appointments/:id e POST /appointments/:id/actions já existem no backend. Os hooks Kubb estão gerados. Parte da migração descrita em #63.
Além disso, useFilterAppointments filtra por status em português ("Aguardando", "Confirmado") mas a API retorna em inglês ("pending", "confirmed", "canceled", "completed").
Decisão de design
Descomentar as chamadas reais e remover os mocks. Criar adapter pra traduzir o shape da API pro shape esperado pelos componentes (IAppointment, IAppointmentDetail). Atualizar useFilterAppointments pra filtrar por status em inglês.
Campos que a API não retorna (como price, services[], duration, attachments, mapUrl) serão tratados como opcionais nos tipos — eles podem ser adicionados ao backend depois.
O que fazer
- Descomentar chamada real em
fetchAppointments() → GET /appointments/me
- Descomentar chamada real em
fetchAppointmentDetail() → GET /appointments/:id
- Substituir
cancelAppointmentRequest() (fake delay) → POST /appointments/:id/actions { action: "cancel" }
- Criar adapter
toAppointmentProps() pra mapear shape da API → tipos do frontend
- Atualizar
useFilterAppointments pra status em inglês: pending, confirmed, canceled, completed
- Atualizar
AppointmentsStatusTabs se necessário (labels em PT, valores em EN)
- Tornar campos inexistentes na API opcionais nos tipos (
price, services, duration, etc.)
- Remover mocks:
public/mocks/appointments.json, public/mocks/appointmentDetails.json
Fora de escopo
Comportamento esperado
- Lista de agendamentos carrega da API real, filtrada por status
- Detalhe de agendamento carrega da API real
- Cancelamento envia action real pra API e atualiza a lista (React Query invalidation)
- Tabs de status filtram corretamente com valores da API
Critérios de aceite
Arquivos relevantes
src/features/agentamentos/services/appointments.ts
src/features/agentamentos/hooks/useAppointments.ts
src/features/agentamentos/hooks/useAppointmentDetail.ts
src/features/agentamentos/hooks/useCancelAppointment.ts
src/features/agentamentos/hooks/useFilterAppointments.ts
src/features/agentamentos/components/AppointmentsStatusTabs.tsx
src/kubb/hooks/useGetAppointmentsMe.ts
src/kubb/hooks/useGetAppointmentsId.ts
src/kubb/hooks/usePostAppointmentsIdActions.ts
Parte de #63.
Contexto
Os hooks de agendamentos (
useAppointments,useAppointmentDetail,useCancelAppointment) buscam de/mocks/appointments.jsone/mocks/appointmentDetails.json. O cancelamento simula um delay de 1200ms. As chamadas reais estão comentadas no código. Os endpointsGET /appointments/me,GET /appointments/:idePOST /appointments/:id/actionsjá existem no backend. Os hooks Kubb estão gerados. Parte da migração descrita em #63.Além disso,
useFilterAppointmentsfiltra por status em português ("Aguardando", "Confirmado") mas a API retorna em inglês ("pending", "confirmed", "canceled", "completed").Decisão de design
Descomentar as chamadas reais e remover os mocks. Criar adapter pra traduzir o shape da API pro shape esperado pelos componentes (
IAppointment,IAppointmentDetail). AtualizaruseFilterAppointmentspra filtrar por status em inglês.Campos que a API não retorna (como
price,services[],duration,attachments,mapUrl) serão tratados como opcionais nos tipos — eles podem ser adicionados ao backend depois.O que fazer
fetchAppointments()→GET /appointments/mefetchAppointmentDetail()→GET /appointments/:idcancelAppointmentRequest()(fake delay) →POST /appointments/:id/actions { action: "cancel" }toAppointmentProps()pra mapear shape da API → tipos do frontenduseFilterAppointmentspra status em inglês:pending,confirmed,canceled,completedAppointmentsStatusTabsse necessário (labels em PT, valores em EN)price,services,duration, etc.)public/mocks/appointments.json,public/mocks/appointmentDetails.jsonFora de escopo
Comportamento esperado
Critérios de aceite
Arquivos relevantes
src/features/agentamentos/services/appointments.tssrc/features/agentamentos/hooks/useAppointments.tssrc/features/agentamentos/hooks/useAppointmentDetail.tssrc/features/agentamentos/hooks/useCancelAppointment.tssrc/features/agentamentos/hooks/useFilterAppointments.tssrc/features/agentamentos/components/AppointmentsStatusTabs.tsxsrc/kubb/hooks/useGetAppointmentsMe.tssrc/kubb/hooks/useGetAppointmentsId.tssrc/kubb/hooks/usePostAppointmentsIdActions.tsParte de #63.