Skip to content

Integração: migrar Agendamentos para API real (lista, detalhe, cancelamento) #211

Description

@tarcisiopgs

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

  1. Lista de agendamentos carrega da API real, filtrada por status
  2. Detalhe de agendamento carrega da API real
  3. Cancelamento envia action real pra API e atualiza a lista (React Query invalidation)
  4. Tabs de status filtram corretamente com valores da API

Critérios de aceite

  • Lista de agendamentos vem da API real
  • Detalhe de agendamento vem da API real
  • Cancelamento funciona via API
  • Filtro por status funciona com valores em inglês
  • Mocks de agendamentos removidos
  • Loading e error states

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.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions