Files

4.1 KiB

Tarefas — Gerenciamento de Clubes (Odonto e Médico)

Princípio geral

Cada clube (Odonto e Médico) tem configurações totalmente independentes para:

  • Valores — planos e preços
  • Condições — condições de adesão e cobertura
  • Regras — regras de uso do clube
  • FAQ / Sanfona — perguntas e respostas exibidas na página pública

Todos os dados são vinculados por club_id, garantindo isolamento completo entre os clubes.


1. Backend — sistema-nuvem

1.1 Endpoints de Planos (Valores)

  • GET /api/admin/club/plans?club_id=X — listar planos do clube
  • POST /api/admin/club/plans — criar plano
  • PUT /api/admin/club/plans/:id — editar plano
  • DELETE /api/admin/club/plans/:id — remover plano (bloqueia se houver membros ativos)

1.2 Tabela e Endpoints de Condições

  • Adicionar campo conditions (TEXT) e rules (TEXT) na tabela benefit_clubs
  • GET /api/clubs/:slug — retorna o clube com conditions e rules
  • PUT /api/admin/club/:id/content — salvar condições e regras do clube

1.3 Tabela e Endpoints de FAQ

  • Criar tabela club_faqs (id, club_id, tenant_id, question, answer, sort_order, active)
  • Seed: 4 FAQs padrão criadas para cada clube separadamente
  • GET /api/clubs/:slug/faqs — público, usado pelo customer-app
  • GET /api/admin/club/faqs?club_id=X — admin
  • POST /api/admin/club/faqs — criar FAQ
  • PUT /api/admin/club/faqs/:id — editar FAQ
  • DELETE /api/admin/club/faqs/:id — remover FAQ

2. Admin App — admin-app/src

2.1 ClubService — services/api.ts

  • Métodos de planos: listPlans, createPlan, updatePlan, deletePlan
  • Métodos de conteúdo: saveContent(clubId, { conditions, rules })
  • Métodos de FAQ: listFaqs, createFaq, updateFaq, deleteFaq

2.2 ClubPage.tsx — aba "Planos" (Valores)

  • Nova aba plans (Planos & Preços) no tab bar
  • Cards por plano: nome, preço/mês, máx. dependentes, lista de features
  • PlanModal com campos: Nome, Descrição, Preço mensal, Máx. dependentes, Features dinâmicas
  • Botão Novo Plano / Editar / Excluir (com validação de membros ativos)

2.3 ClubPage.tsx — aba "Condições & Regras"

  • Nova aba content (Condições & Regras) no tab bar
  • Dois textareas: Condições de Adesão + Regras de Uso
  • Pré-visualização em tempo real
  • Botão Salvar com feedback de sucesso/erro
  • Carrega dados atuais do clube via API pública no mount
  • Cada clube salva e exibe suas próprias condições e regras

2.4 ClubPage.tsx — aba "FAQ / Sanfona"

  • Nova aba faq (FAQ / Sanfona) no tab bar
  • Lista de FAQs com: pergunta, status ativo/inativo, ordem
  • Botões ▲ ▼ para reordenar (atualiza sort_order via API)
  • FaqModal com campos: Pergunta, Resposta, Ordem, Ativo
  • Botão Nova FAQ / Editar / Excluir
  • Cada clube gerencia seu próprio conjunto de FAQs

3. Customer App — customer-app/src

3.1 ClubAPI — api.ts

  • Adicionado getFaqs(slug)GET /api/clubs/:slug/faqs
  • get(slug) já retorna conditions e rules da tabela

3.2 ClubePage.tsx — conteúdo dinâmico

  • FAQs: removido array hardcoded, busca da API via getFaqs(), exibido apenas se houver
  • Condições: seção exibida condicionalmente ({club.conditions && ...})
  • Regras: seção exibida condicionalmente ({club.rules && ...})
  • Cada clube exibe apenas suas próprias informações

Ordem de implementação — CONCLUÍDA

  1. Backend: alterar benefit_clubs — adicionar conditions e rules
  2. Backend: criar tabela club_faqs + seed das FAQs atuais
  3. Backend: endpoints de planos (admin)
  4. Backend: endpoint de conteúdo PUT /api/admin/club/:id/content
  5. Backend: endpoints de FAQ (admin + público)
  6. Admin: ClubService (todos os métodos)
  7. Admin: aba Planos + PlanModal
  8. Admin: aba Condições & Regras + preview
  9. Admin: aba FAQ + FaqModal + reordenação ▲▼
  10. Customer: ClubAPI + ClubePage dinâmica
  11. Build dos 3 apps