Files
RDO/documentation/RESUMO_ACOES_PRIORITARIAS.md
2026-02-20 07:25:32 -03:00

400 lines
9.2 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🎯 RESUMO DAS AÇÕES PRIORITÁRIAS - TRANSFORMAÇÃO SAAS MULTI-TENANT
## ✅ JÁ ESTÁ PRONTO (Não precisa implementar nada ainda!)
### 📦 Arquivos Criados:
1.**4 Migrations SQL completas** em `supabase/migrations/`
2.**Scripts de verificação** (`check-supabase-status.js`)
3.**Scripts de deploy** (`apply-migrations.js`)
4.**Documentação completa** (3 arquivos .md)
### 🗄️ Schema do Banco de Dados:
- ✅ Tabela `organizacoes` (tenants) com slug, planos e limites
- ✅ Sistema de roles e permissões por organização
- ✅ Sistema de convites para onboarding
- ✅ Todas as tabelas adaptadas com `organizacao_id`
- ✅ RLS (Row Level Security) completo
- ✅ Triggers automáticos para propagação de dados
- ✅ Validação de quotas por plano
- ✅ Funções auxiliares para permissões
---
## 🚀 PRÓXIMAS AÇÕES (Em ordem de prioridade)
### **1⃣ APLICAR MIGRATIONS NO SUPABASE** ⚡ URGENTE
**Por que fazer primeiro?**
Sem o banco de dados configurado, nada mais funciona.
**Como fazer:**
#### Opção A: Via Supabase CLI (Recomendado)
```bash
# Passo 1: Linkar projeto
supabase link --project-ref bbyzrywmgjiufqtnkslu
# Passo 2: Aplicar migrations
supabase db push
# Passo 3: Verificar
node check-supabase-status.js
```
#### Opção B: Via Dashboard
1. Acesse: https://supabase.com/dashboard/project/bbyzrywmgjiufqtnkslu/editor
2. Abra SQL Editor
3. Execute cada migration manualmente (na ordem)
**Tempo estimado:** 30 minutos
**Resultado esperado:**
- ✅ 16 tabelas criadas
- ✅ RLS habilitado em todas
- ✅ 1 organização demo criada
- ✅ Funções e triggers funcionando
---
### **2⃣ ATUALIZAR TIPOS TYPESCRIPT**
**Arquivo:** `src/types/database.types.ts`
**O que fazer:**
```bash
# Gerar tipos atualizados do Supabase
supabase gen types typescript --project-id bbyzrywmgjiufqtnkslu > src/types/database.types.ts
```
**Ou manualmente:**
- Adicionar tipo `Organization`
- Adicionar tipo `OrganizacaoUsuario`
- Adicionar tipo `Convite`
- Atualizar tipos existentes com `organizacao_id`
**Tempo estimado:** 1 hora
---
### **3⃣ CRIAR CONTEXTO DE ORGANIZAÇÃO**
**Arquivo novo:** `src/contexts/OrganizationContext.tsx`
**O que criar:**
```typescript
interface OrganizationContextType {
organization: Organization | null;
loading: boolean;
isOwner: boolean;
isAdmin: boolean;
userRole: string | null;
switchOrganization: (slug: string) => Promise<void>;
}
export const OrganizationProvider: React.FC<{children}> = ({children}) => {
// Implementação
};
export const useOrganization = () => useContext(OrganizationContext);
```
**Integrar em:** `src/App.tsx`
**Tempo estimado:** 2 horas
---
### **4⃣ IMPLEMENTAR ROTEAMENTO COM SLUG**
**Arquivos a modificar:**
- `src/config/routes.tsx`
- `src/App.tsx`
**Mudança:**
```typescript
// Antes
{ path: '/dashboard', component: Dashboard }
// Depois
{ path: '/:orgSlug/dashboard', component: Dashboard }
```
**Criar componente:** `ProtectedOrgRoute`
- Extrair slug da URL
- Validar acesso do usuário
- Carregar organização
- Redirecionar se não tiver acesso
**Tempo estimado:** 3 horas
---
### **5⃣ ATUALIZAR QUERIES DO SUPABASE**
**Criar helper:** `src/lib/supabase-tenant.ts`
```typescript
export const useTenantQuery = <T>(table: string) => {
const { organization } = useOrganization();
return useQuery({
queryKey: [table, organization?.id],
queryFn: async () => {
const { data, error } = await supabase
.from(table)
.select('*')
.eq('organizacao_id', organization?.id);
if (error) throw error;
return data as T[];
},
enabled: !!organization?.id
});
};
```
**Atualizar TODAS as queries em:**
- `src/hooks/useSupabaseData.ts`
- `src/hooks/queries/*`
- `src/stores/*`
- `src/pages/*`
**Tempo estimado:** 1 dia
---
### **6⃣ CRIAR FLUXO DE SIGNUP**
**Arquivo novo:** `src/pages/SignupOrganization.tsx`
**Fluxo:**
1. Formulário com:
- Nome da organização
- Slug (validar unicidade)
- Email do usuário
- Nome do usuário
- Senha
2. Ao submeter:
```typescript
// 1. Criar usuário no Auth
const { data: authData } = await supabase.auth.signUp({
email,
password,
options: {
data: { nome, organizacao_id: null }
}
});
// 2. Criar organização e vincular usuário
const { data: orgData } = await supabase.rpc('criar_organizacao_com_owner', {
p_slug: slug,
p_nome: nomeOrg,
p_email_usuario: email,
p_nome_usuario: nome,
p_user_id: authData.user.id
});
// 3. Redirecionar
navigate(`/${slug}/dashboard`);
```
**Tempo estimado:** 4 horas
---
### **7⃣ CRIAR SISTEMA DE CONVITES**
**Arquivo novo:** `src/pages/TeamManagement.tsx`
**Funcionalidades:**
- Listar membros da equipe
- Botão "Convidar Membro"
- Modal com formulário (email + role)
- Gerar link de convite
- Copiar link ou enviar por email
**Arquivo novo:** `src/pages/AcceptInvite.tsx`
- Rota: `/convite/:token`
- Validar token
- Formulário de cadastro
- Aceitar convite e criar conta
**Tempo estimado:** 6 horas
---
### **8⃣ CRIAR DASHBOARD DE ADMIN**
**Arquivo novo:** `src/pages/OrganizationSettings.tsx`
**Abas:**
1. **Geral** - Nome, logo, cores
2. **Equipe** - Membros, convites, roles
3. **Plano** - Plano atual, uso, limites
4. **Personalização** - Tipos de atividade, funções, etc.
**Tempo estimado:** 1 dia
---
### **9⃣ IMPLEMENTAR VALIDAÇÃO DE QUOTAS**
**Criar:** `src/lib/quota-checker.ts`
```typescript
export async function checkQuota(
resource: 'usuarios' | 'obras' | 'rdos'
): Promise<{ allowed: boolean; message?: string }> {
const { organization } = useOrganization();
const { data: metricas } = await supabase
.from('organizacao_metricas')
.select('*')
.eq('organizacao_id', organization.id)
.single();
// Verificar limites
// Retornar resultado
}
```
**Integrar em:**
- Criação de obras
- Criação de RDOs
- Convite de usuários
**Mostrar modal quando atingir limite**
**Tempo estimado:** 4 horas
---
### **🔟 APLICAR PERSONALIZAÇÃO**
**Criar:** `src/hooks/useTheme.ts`
```typescript
export const useTheme = () => {
const { organization } = useOrganization();
useEffect(() => {
if (organization) {
document.documentElement.style.setProperty(
'--color-primary',
organization.cor_primaria
);
document.documentElement.style.setProperty(
'--color-secondary',
organization.cor_secundaria
);
}
}, [organization]);
};
```
**Carregar configurações dinâmicas:**
- Tipos de atividade
- Funções de mão de obra
- Tipos de equipamento
- Condições climáticas
**Tempo estimado:** 3 horas
---
## 📊 CRONOGRAMA SUGERIDO
### **Semana 1: Fundação**
- ✅ Dia 1: Aplicar migrations + Atualizar tipos
- ✅ Dia 2: Criar OrganizationContext
- ✅ Dia 3: Implementar roteamento com slug
- ✅ Dia 4-5: Atualizar todas as queries
### **Semana 2: Onboarding**
- ✅ Dia 1: Criar signup de organização
- ✅ Dia 2-3: Sistema de convites completo
- ✅ Dia 4-5: Dashboard de admin
### **Semana 3: Refinamento**
- ✅ Dia 1: Validação de quotas
- ✅ Dia 2: Personalização
- ✅ Dia 3-5: Testes e ajustes
**Total: 15 dias úteis (3 semanas)**
---
## 🎯 MÉTRICAS DE SUCESSO
### Técnicas:
- [ ] Todas as migrations aplicadas sem erros
- [ ] RLS funcionando (usuários não veem dados de outras orgs)
- [ ] Quotas sendo validadas
- [ ] Sem queries sem `organizacao_id`
### Funcionais:
- [ ] Usuário consegue criar organização
- [ ] Usuário consegue convidar membros
- [ ] Convidado consegue aceitar e criar conta
- [ ] Cada organização vê apenas seus dados
- [ ] Personalização aplicada corretamente
### Performance:
- [ ] Queries com índices otimizados
- [ ] Tempo de carregamento < 2s
- [ ] Sem N+1 queries
---
## ⚠️ PONTOS DE ATENÇÃO
### Segurança:
- ⚠️ **NUNCA** confiar apenas no frontend
- ⚠️ **SEMPRE** validar `organizacao_id` no backend (RLS)
- ⚠️ **NUNCA** expor service_role_key no frontend
- ⚠️ Validar permissões em TODAS as operações
### Performance:
- ⚠️ Usar índices compostos `(organizacao_id, id)`
- ⚠️ Cachear configurações da organização
- ⚠️ Lazy loading de recursos pesados
### UX:
- ⚠️ Indicador visual da organização atual
- ⚠️ Transição suave entre organizações
- ⚠️ Mensagens claras quando atingir limites
- ⚠️ Onboarding guiado para novos usuários
---
## 🆘 PRECISA DE AJUDA?
### Durante a implementação:
1. **Erro nas migrations?** → Me envie a mensagem de erro
2. **Dúvida sobre alguma fase?** → Posso detalhar qualquer parte
3. **Problema de performance?** → Posso otimizar queries
4. **Questão de segurança?** → Posso revisar políticas RLS
### Documentação de referência:
- `INSTRUCOES_DEPLOY_SUPABASE.md` - Como aplicar migrations
- `PLANO_SAAS_MULTI_TENANT.md` - Plano completo detalhado
- Migrations em `supabase/migrations/` - Schema do banco
---
## 🎉 CONCLUSÃO
**Você tem tudo pronto para começar!**
O trabalho mais complexo (schema do banco de dados) já está feito.
Agora é seguir o passo a passo acima para integrar no frontend.
**Próximo passo imediato:**
```bash
supabase link --project-ref bbyzrywmgjiufqtnkslu
supabase db push
```
**Boa sorte! 🚀**