Menuabrir
Em fluxoAtualizado em 14 de mai. de 2026, 00:06
Módulo sem dependências cross-módulo declaradas.

Staff

Status: 🟡 Em fluxo (CRUD básico, sem sync com Identity) Code: backend/app/modules/staff UI: frontend/src/app/(admin)/[slug]/admin/staff Última revisão deste doc: 2026-05-13 por Felipe + Claude


1. Identidade

O que faz (uma frase)

CRUD de operadores internos do tenant (owner, admin, facilitator, sales_rep, support, content_manager, marketing) com bio + photo + soft-delete.

Por que existe

CRM tem contatos (clientes/leads). Staff tem quem opera o sistema (admins, facilitadores). Separação importante porque:

  • Staff pode ser assinante de aula sem ser cliente.
  • Roles determinam permissões (futuro).
  • Bio/photo aparecem em chat humano + assignment de deals.

Status atual

CRUD básico em prod. Sem sync com Identity Service ainda — staff_member é registro local.


2. Cases de uso reais

Case 1: Felipe adiciona Vivian como facilitator

UI /admin/staff → "+Novo" → form (name, email, role=facilitator, bio, photo) → POST → row em staff_member.

Case 2: Atribuir deal a staff

UI /admin/crm/deals/{id} → assign dropdown → seleciona staff → crm_deal.assigned_to=<staff_id>.


3. Arquitetura interna


4. Tabelas (1)

staff_member

ColunaNotas
tenant_ididx
name / email (não unique entre tenants)
roleenum string: owner / admin / facilitator / sales_rep / support / content_manager / marketing
bio / photo_url
is_activeSoft-delete

5. API / Endpoints (5)

Prefixo /api/staff.

MétodoRotaO que faz
GET/staffLista (filtros: role, include_inactive)
POST/staffCriar
GET/staff/{id}Detalhe
PATCH/staff/{id}Update partial
DELETE/staff/{id}Soft-delete

6. Limitações e débitos técnicos

#Item
1Sem sync com Identity Service — staff é registro local
2Email não unique entre tenants
3Roles são strings livres — sem constraint DB

7. Histórico

Em prod desde Suite v2. Roadmap: integração com Identity (invite + role-based permissions).