# 🔧 Corrigir Problemas na VPS

## Problemas Identificados

### 1. ❌ Arquivo Faltante: `jobs/pointsExpirationJob.js`

**Erro:**
```
⚠️  Erro ao agendar job de expiração de pontos: Cannot find module './jobs/pointsExpirationJob'
```

**Solução:**

O arquivo `jobs/pointsExpirationJob.js` existe localmente mas não está na VPS. Você precisa copiá-lo.

**Opção 1: Copiar via SCP (recomendado)**
```bash
# No seu computador local (Windows PowerShell ou Git Bash)
scp jobs/pointsExpirationJob.js root@SEU_SERVIDOR:/var/www/maktubia-backend/jobs/
```

**Opção 2: Criar manualmente na VPS**
```bash
# Na VPS, criar o diretório se não existir
mkdir -p /var/www/maktubia-backend/jobs

# Copiar o conteúdo do arquivo jobs/pointsExpirationJob.js
# (você pode copiar e colar o conteúdo do arquivo local)
```

**Opção 3: Verificar se o arquivo existe**
```bash
# Na VPS
cd /var/www/maktubia-backend
bash deploy/verificar-arquivo-pointsExpirationJob.sh
```

### 2. ❌ Erro 500 em `/api/campaigns`

**Erro:**
```
GET /api/campaigns?page=1&limit=10 500
```

**Possíveis Causas:**

1. **Usuário não autenticado**: A rota requer autenticação (`isAuthenticated`). Verifique se o token está sendo enviado corretamente.

2. **Erro na query do banco**: Pode haver um problema com a query `Campaigns.findAll()`.

3. **Problema com `req.user`**: O middleware de autenticação pode não estar definindo `req.user` corretamente.

**Solução:**

1. **Verificar logs detalhados:**
```bash
# Na VPS
pm2 logs maktubia-backend --lines 50
```

2. **Verificar se o usuário está autenticado:**
   - Certifique-se de que o token JWT está sendo enviado no header `Authorization: Bearer <token>`
   - Verifique se o token não expirou

3. **Testar a rota diretamente:**
```bash
# Na VPS, testar com curl
curl -X GET "http://localhost:8000/api/campaigns?page=1&limit=10" \
  -H "Authorization: Bearer SEU_TOKEN_AQUI"
```

4. **Verificar estrutura do banco:**
```bash
# Na VPS
sudo -u postgres psql -d maktubia_points -c "SELECT COUNT(*) FROM campaigns;"
```

## Passos para Resolver

### Passo 1: Copiar arquivo faltante
```bash
# No seu computador local
scp jobs/pointsExpirationJob.js root@SEU_SERVIDOR:/var/www/maktubia-backend/jobs/
```

### Passo 2: Verificar na VPS
```bash
# Na VPS
cd /var/www/maktubia-backend
ls -la jobs/pointsExpirationJob.js
```

### Passo 3: Reiniciar aplicação
```bash
# Na VPS
pm2 restart maktubia-backend
pm2 logs maktubia-backend --lines 20
```

### Passo 4: Verificar se o erro foi resolvido
```bash
# Verificar logs
pm2 logs maktubia-backend --lines 10
```

## Arquivos Necessários na VPS

Certifique-se de que os seguintes arquivos existem na VPS:

- ✅ `jobs/pointsExpirationJob.js` - **FALTANDO**
- ✅ `services/pointsExpirationService.js`
- ✅ `controllers/pointsExpirationController.js`
- ✅ `routes/pointsExpirationRoutes.js`

## Verificação Rápida

Execute este script na VPS para verificar todos os arquivos:

```bash
cd /var/www/maktubia-backend

echo "Verificando arquivos necessários..."
echo ""

# Verificar jobs
if [ -f "jobs/pointsExpirationJob.js" ]; then
    echo "✅ jobs/pointsExpirationJob.js existe"
else
    echo "❌ jobs/pointsExpirationJob.js NÃO existe"
fi

# Verificar services
if [ -f "services/pointsExpirationService.js" ]; then
    echo "✅ services/pointsExpirationService.js existe"
else
    echo "❌ services/pointsExpirationService.js NÃO existe"
fi

# Verificar controllers
if [ -f "controllers/pointsExpirationController.js" ]; then
    echo "✅ controllers/pointsExpirationController.js existe"
else
    echo "❌ controllers/pointsExpirationController.js NÃO existe"
fi

# Verificar routes
if [ -f "routes/pointsExpirationRoutes.js" ]; then
    echo "✅ routes/pointsExpirationRoutes.js existe"
else
    echo "❌ routes/pointsExpirationRoutes.js NÃO existe"
fi
```

## Nota Importante

O erro do `pointsExpirationJob` não impede a aplicação de funcionar, mas o job de expiração de pontos não será executado. O erro 500 em `/api/campaigns` é mais crítico e precisa ser investigado.

Para investigar o erro 500, verifique os logs detalhados do PM2 para ver a mensagem de erro completa.





