# 🚀 INSTRUÇÕES PARA EXECUTAR A MIGRATION

## 📋 Pré-requisitos

1. **Backup do Banco de Dados** ⚠️
   ```bash
   # Faça backup completo antes de executar
   mysqldump -u usuario -p nome_banco > backup_antes_migration.sql
   ```

2. **Ambiente de Teste**
   - Execute primeiro em ambiente de desenvolvimento/teste
   - Valide que tudo funciona corretamente
   - Só depois execute em produção

---

## 🔧 PASSO 1: Executar a Migration

### Opção A: Via Linha de Comando (Recomendado)

```bash
# Navegar até o diretório do projeto
cd D:\xampp\htdocs\SouMulherAgenda

# Executar a migration
php spark migrate

# Ou executar apenas esta migration específica
php spark migrate -n "App\Database\Migrations" --all
```

### Opção B: Via Código PHP

Crie um arquivo temporário `run_migration.php` na raiz do projeto:

```php
<?php
require 'vendor/autoload.php';

$app = \Config\Services::codeigniter();
$app->initialize();

$migrate = \Config\Services::migrations();

try {
    if ($migrate->latest()) {
        echo "✅ Migration executada com sucesso!\n";
    } else {
        echo "❌ Erro ao executar migration\n";
        print_r($migrate->getErrors());
    }
} catch (\Exception $e) {
    echo "❌ Erro: " . $e->getMessage() . "\n";
}
```

Execute:
```bash
php run_migration.php
```

---

## 📊 PASSO 2: Atualizar Registros Existentes

Após executar a migration, você **DEVE** atualizar os registros existentes com o `user_id` correto.

### Opção A: Via SQL Direto

```sql
-- Substitua 32 pelo ID do seu usuário/empresa
UPDATE `mensagens` SET `user_id` = 32 WHERE `user_id` = 0;
UPDATE `marcacoes` SET `user_id` = 32 WHERE `user_id` = 0;

-- Verificar se atualizou corretamente
SELECT COUNT(*) as total FROM `mensagens` WHERE `user_id` = 0;
SELECT COUNT(*) as total FROM `marcacoes` WHERE `user_id` = 0;
-- Ambos devem retornar 0
```

### Opção B: Via Código PHP

Crie um arquivo `update_userids.php`:

```php
<?php
require 'vendor/autoload.php';

$app = \Config\Services::codeigniter();
$app->initialize();

// Substitua pelo user_id correto
$userId = 32;

$db = \Config\Database::connect();

// Atualizar mensagens
$affectedMensagens = $db->query(
    "UPDATE `mensagens` SET `user_id` = ? WHERE `user_id` = 0",
    [$userId]
)->affectedRows();

echo "✓ {$affectedMensagens} mensagens atualizadas\n";

// Atualizar marcacoes
$affectedMarcacoes = $db->query(
    "UPDATE `marcacoes` SET `user_id` = ? WHERE `user_id` = 0",
    [$userId]
)->affectedRows();

echo "✓ {$affectedMarcacoes} marcações atualizadas\n";

// Verificar
$mensagensSemUserId = $db->query("SELECT COUNT(*) as total FROM `mensagens` WHERE `user_id` = 0")->getRow()->total;
$marcacoesSemUserId = $db->query("SELECT COUNT(*) as total FROM `marcacoes` WHERE `user_id` = 0")->getRow()->total;

echo "\nMensagens sem user_id: {$mensagensSemUserId}\n";
echo "Marcações sem user_id: {$marcacoesSemUserId}\n";

if ($mensagensSemUserId === 0 && $marcacoesSemUserId === 0) {
    echo "\n✅ TODOS OS REGISTROS ATUALIZADOS!\n";
}
```

Execute:
```bash
php update_userids.php
```

---

## 🧪 PASSO 3: Testar Funcionalidades

### Testes Obrigatórios:

1. **Testar Criação de Mensagens**
   - Acessar o chatbot
   - Criar uma nova mensagem
   - Verificar que `user_id` foi inserido automaticamente

2. **Testar Listagem de Mensagens**
   - Verificar que só aparecem mensagens da empresa logada
   - Tentar acessar com outro usuário e confirmar isolamento

3. **Testar Exclusão de Mensagens**
   - Tentar excluir uma mensagem própria (deve funcionar)
   - Verificar logs de erro se houver

4. **Testar Produtos**
   - Editar um produto (deve funcionar)
   - Excluir um produto (deve funcionar)
   - Verificar que não consegue editar produtos de outras empresas

5. **Testar Agendamentos**
   - Excluir um horário (deve funcionar)
   - Verificar que validação de permissão está ativa

---

## 🔄 ROLLBACK (Se Necessário)

Se algo der errado, você pode reverter a migration:

```bash
# Reverter última migration
php spark migrate:rollback

# Ou via SQL manual
ALTER TABLE `mensagens` DROP INDEX `idx_mensagens_user_instance`;
ALTER TABLE `mensagens` DROP INDEX `idx_mensagens_user_id`;
ALTER TABLE `mensagens` DROP COLUMN `user_id`;

ALTER TABLE `marcacoes` DROP INDEX `idx_marcacoes_user_date`;
ALTER TABLE `marcacoes` DROP INDEX `idx_marcacoes_user_id`;
ALTER TABLE `marcacoes` DROP COLUMN `user_id`;
```

Depois restaure o backup:
```bash
mysql -u usuario -p nome_banco < backup_antes_migration.sql
```

---

## ✅ VERIFICAÇÃO FINAL

Execute estes comandos SQL para verificar que tudo está correto:

```sql
-- 1. Verificar estrutura das tabelas
DESCRIBE `mensagens`;
DESCRIBE `marcacoes`;

-- 2. Verificar índices
SHOW INDEX FROM `mensagens`;
SHOW INDEX FROM `marcacoes`;

-- 3. Verificar dados (não deve haver registros com user_id = 0)
SELECT COUNT(*) as total, 'mensagens' as tabela FROM `mensagens` WHERE `user_id` = 0
UNION ALL
SELECT COUNT(*) as total, 'marcacoes' as tabela FROM `marcacoes` WHERE `user_id` = 0;

-- 4. Verificar distribuição de user_id
SELECT user_id, COUNT(*) as total FROM `mensagens` GROUP BY user_id;
SELECT user_id, COUNT(*) as total FROM `marcacoes` GROUP BY user_id;
```

**Resultado Esperado:**
- ✅ Colunas `user_id` existem nas duas tabelas
- ✅ Índices foram criados
- ✅ Nenhum registro com `user_id = 0`
- ✅ Todos os registros têm `user_id` válido

---

## 🎯 CHECKLIST DE EXECUÇÃO

- [ ] Backup do banco de dados criado
- [ ] Migration executada sem erros
- [ ] Colunas `user_id` adicionadas
- [ ] Índices criados
- [ ] Registros existentes atualizados
- [ ] Nenhum registro com `user_id = 0`
- [ ] Testes de criação funcionando
- [ ] Testes de listagem funcionando
- [ ] Testes de exclusão funcionando
- [ ] Testes de edição funcionando
- [ ] Isolamento entre empresas validado

---

## 📞 TROUBLESHOOTING

### Erro: "Column 'user_id' already exists"
**Solução:** A coluna já foi adicionada. A migration detecta isso e pula automaticamente.

### Erro: "Key 'idx_mensagens_user_id' already exists"
**Solução:** O índice já existe. A migration detecta e pula.

### Erro: "Table 'mensagens' doesn't exist"
**Solução:** Verifique o nome correto das tabelas no seu banco. Ajuste a migration se necessário.

### Registros com user_id = 0
**Solução:** Execute o PASSO 2 novamente para atualizar os registros.

---

## 🎉 CONCLUSÃO

Após seguir todos esses passos:

1. ✅ Seu banco de dados terá as colunas `user_id`
2. ✅ Todos os registros terão `user_id` válido
3. ✅ O sistema estará protegido contra vazamento de dados
4. ✅ Hooks automáticos inserirão `user_id` em novos registros
5. ✅ Validações de permissão estarão ativas

**🔒 SISTEMA 100% SEGURO PARA MULTI-TENANT!**

---

*Para mais informações, consulte RELATORIO_CORRECOES_SEGURANCA.md*
