4.1 KiB
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 clubePOST /api/admin/club/plans— criar planoPUT /api/admin/club/plans/:id— editar planoDELETE /api/admin/club/plans/:id— remover plano (bloqueia se houver membros ativos)
1.2 Tabela e Endpoints de Condições
- Adicionar campo
conditions(TEXT) erules(TEXT) na tabelabenefit_clubs GET /api/clubs/:slug— retorna o clube comconditionserulesPUT /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-appGET /api/admin/club/faqs?club_id=X— adminPOST /api/admin/club/faqs— criar FAQPUT /api/admin/club/faqs/:id— editar FAQDELETE /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á retornaconditionserulesda 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
- Backend: alterar
benefit_clubs— adicionarconditionserules - Backend: criar tabela
club_faqs+ seed das FAQs atuais - Backend: endpoints de planos (admin)
- Backend: endpoint de conteúdo
PUT /api/admin/club/:id/content - Backend: endpoints de FAQ (admin + público)
- Admin: ClubService (todos os métodos)
- Admin: aba Planos + PlanModal
- Admin: aba Condições & Regras + preview
- Admin: aba FAQ + FaqModal + reordenação ▲▼
- Customer: ClubAPI + ClubePage dinâmica
- Build dos 3 apps ✅