# Referência de Comandos — Promoções Alyne

Guia completo de todos os comandos Artisan disponíveis, organizados por categoria.

> **Multi-tenant**: todos os comandos do pipeline aceitam `--user=ID` para operar no contexto de um usuário específico.
> Omitir `--user` usa o modo legado (`.env`), que pode gerar erros se a sessão global não existir.

---

## Configuração inicial (via painel web)

A maior parte da configuração agora é feita pelo painel em **`/admin/setup`**:

- **Telegram** — API ID, Hash, telefone, preferências de publicação
- **Mercado Livre** — Tag de afiliado + cookie de sessão
- **Amazon** — Tag de afiliado
- **WhatsApp** — Token e URL base

Fontes e destinos são gerenciados em **`/admin/monitoring/sources`** e **`/admin/monitoring/targets`**.

---

## Autenticação e sessão Telegram

### Autenticar usuário no Telegram (MadelineProto) ```powershell
# Usuário específico (multi-tenant — recomendado)
php artisan telegram:test-login --user=1
php artisan telegram:test-login --user=1 --show-madeline-logs   # verbose

# Modo legado (usa .env — apenas se não houver multi-tenant)
php artisan telegram:test-login
```

### Limpar sessão corrompida (erro "lightstate" ou similar)
```powershell
# Ver o que seria removido sem apagar nada
php artisan telegram:clear-session --user=1 --dry-run

# Remover sessão (exige confirmação interativa)
php artisan telegram:clear-session --user=1

# Remover sem confirmação + incluir backups
php artisan telegram:clear-session --user=1 --force --include-backups
```
Após limpar, execute `telegram:test-login --user=1` para reautenticar.

---

## Cadastro de fontes e destinos (via terminal)

> Preferível usar o painel web. Use os comandos abaixo apenas para automação/scripts.

### Cadastrar fonte Telegram
```powershell
php artisan telegram:source-add "https://t.me/urubupromo" "UrubuPromo" --user=1
php artisan telegram:source-add "@economizzandodg" "Economizzando" --user=1 --limit=200
```

### Cadastrar destino Telegram
```powershell
php artisan telegram:target-add @meucanal "Nome do Canal" --user=1
php artisan telegram:target-add @meucanal "Nome do Canal" --user=1 --pause   # cria desativado
```

### Listar destinos cadastrados
```powershell
php artisan telegram:target-list
```

---

## Pipeline completo (ordem de execução)

O agendador roda estes comandos automaticamente. Use manualmente para testes.

### 1. Ler links dos grupos Telegram
```powershell
php artisan telegram:read-links --user=1
php artisan telegram:read-links --user=1 --debug   # exibe todas as mensagens, mesmo sem link
```

### 2. Processar URLs pendentes (gera ofertas)
```powershell
# Mercado Livre
php artisan telegram:process-pending --user=1 --platform=mercadolivre
php artisan telegram:process-pending --user=1 --platform=mercadolivre --limit=10
php artisan telegram:process-pending --user=1 --platform=mercadolivre --dry-run

# Amazon
php artisan telegram:process-pending --user=1 --platform=amazon
php artisan telegram:process-pending --user=1 --platform=amazon --limit=10
php artisan telegram:process-pending --user=1 --platform=amazon --dry-run
```

### 3. Publicar ofertas
```powershell
# Automático (sem perguntar — usado pelo agendador)
php artisan offers:post --auto --user=1

# Dry-run (mostra o que publicaria sem enviar nada)
php artisan offers:post --auto --user=1 --dry-run

# Limitar quantidade
php artisan offers:post --auto --user=1 --limit=5

# Publicar uma oferta específica pelo ID (ignora rate limit)
php artisan offers:post --offer-id=97 --user=1

# Interativo (pergunta oferta por oferta)
php artisan offers:post --user=1
```

---

## Testes de produto isolado (debug rápido)

### Testar URL Mercado Livre ponta a ponta
```powershell
php artisan telegram:process-ml "https://meli.la/2Y1KyEo"
php artisan telegram:process-ml "https://produto.mercadolivre.com.br/MLB-123456789"
```

### Testar URL Amazon ponta a ponta
```powershell
php artisan telegram:process-amazon "https://amzlink.to/az03U3xidGXlh"
php artisan telegram:process-amazon "https://amzn.to/3xyz"
php artisan telegram:process-amazon "https://www.amazon.com.br/dp/B0FJNTHL39"

# Com cupom manual (tem prioridade sobre o da página)
php artisan telegram:process-amazon "https://amzn.to/3P5dQng" --coupon=MELIACHA
```

### Resolver apenas a URL ML (sem buscar produto)
```powershell
php artisan telegram:resolve-ml "https://meli.la/2USGv1d"
php artisan telegram:resolve-ml "https://meli.la/2USGv1d" --timeout=20
```

### Inspecionar scraping de página ML (diagnóstico)
```powershell
php artisan telegram:scrape-debug "https://produto.mercadolivre.com.br/MLB-123456789"
php artisan telegram:scrape-debug "https://..." --dump-state   # dump completo do JSON embutido
```

### Testar geração de link afiliado ML
```powershell
php artisan ml:test-affiliate
php artisan ml:test-affiliate MLB-44665473
```

---

## Limpeza

### Limpar registros expirados (URLs, ofertas, imagens) ```powershell
php artisan telegram:prune
php artisan telegram:prune --dry-run   # mostra o que seria apagado sem apagar
```

### Zerar dados via tinker
```powershell
# Limpar logs de publicação e ofertas (mantém URLs capturadas)
php artisan tinker --execute="DB::statement('SET FOREIGN_KEY_CHECKS=0'); App\Models\PublicationLog::truncate(); App\Models\ProcessedOffer::truncate(); DB::statement('SET FOREIGN_KEY_CHECKS=1'); echo 'OK';"

# Zerar tudo (URLs + ofertas + logs)
php artisan tinker --execute="DB::statement('SET FOREIGN_KEY_CHECKS=0'); App\Models\PublicationLog::truncate(); App\Models\ProcessedOffer::truncate(); App\Models\CapturedUrl::truncate(); DB::statement('SET FOREIGN_KEY_CHECKS=1'); echo 'OK';"
```

---

## Administração

### Migrar registros legados para um usuário (uso único na migração multi-tenant)
```powershell
# Associa todos os registros com user_id=NULL ao usuário informado
# Remove duplicatas de processed_offers automaticamente
php artisan admin:migrate-records-to-user 1
```

### Configurar permissões e papéis iniciais
```powershell
php artisan admin:setup
```

---

## Scheduler (produção)

### Verificar o que está agendado
```powershell
php artisan schedule:list
```

### Rodar o scheduler manualmente (simula o cron)
```powershell
php artisan schedule:run
```

### Loop de teste local (enquanto o schtasks não está configurado)
```powershell
cd C:\xampp\htdocs\promocoes-alyne
while ($true) { php artisan schedule:run; Start-Sleep -Seconds 60 }
```

### Cadastrar tarefa no Windows Task Scheduler (PowerShell como Administrador)
```powershell
schtasks /Create /SC MINUTE /MO 1 `
  /TN "LaravelScheduleRun-PromocoesAlyne" `
  /TR "wscript.exe C:\xampp\htdocs\promocoes-alyne\run-scheduler.vbs"
```

### Verificar / pausar / remover tarefa agendada
```powershell
schtasks /Query /TN "LaravelScheduleRun-PromocoesAlyne" /FO LIST /V
schtasks /Change /TN "LaravelScheduleRun-PromocoesAlyne" /DISABLE
schtasks /Change /TN "LaravelScheduleRun-PromocoesAlyne" /ENABLE
schtasks /Delete /TN "LaravelScheduleRun-PromocoesAlyne" /F
```

---

## Monitoramento de logs

```powershell
# Log do schedule
Get-Content storage\logs\schedule.log -Wait -Tail 30

# Log principal Laravel
Get-Content storage\logs\laravel.log -Wait -Tail 50

# Log MadelineProto (Telegram)
Get-Content storage\logs\madeline.log -Wait -Tail 30
```

---

## Migrations e cache

```powershell
php artisan migrate
php artisan migrate:status

php artisan config:clear
php artisan cache:clear
```

### Listar todos os comandos do projeto
```powershell
php artisan list telegram
php artisan list ml
php artisan list offers
php artisan list admin
```
