# Comandos Útiles - API SAT Descarga Masiva

## 🚀 Iniciar el Proyecto

### Primera vez
```bash
# Instalar dependencias
composer install

# Copiar archivo de configuración
cp .env.example .env

# Generar key de la aplicación
php artisan key:generate

# Ejecutar migraciones (si las hay)
php artisan migrate

# Iniciar servidor
php artisan serve
```

### Inicios subsecuentes
```bash
# Solo iniciar el servidor
php artisan serve
```

El servidor estará disponible en: `http://localhost:8000`

---

## 🧪 Probar la API

### Prueba automática
```bash
# Ejecutar el script de prueba
./test_sat_api.sh
```

### Prueba manual - Paso a Paso

#### 1. Crear solicitud
```bash
curl -X POST http://localhost:8000/api/v1/sat/solicitud \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
    "fecha_inicio": "2024-01-01 00:00:00",
    "fecha_fin": "2024-01-31 23:59:59"
  }' | python3 -m json.tool
```

#### 2. Verificar solicitud (reemplaza REQUEST_ID)
```bash
curl http://localhost:8000/api/v1/sat/solicitud/REQUEST_ID/verificar | python3 -m json.tool
```

#### 3. Descargar paquetes (cuando status_code = 5004)
```bash
curl http://localhost:8000/api/v1/sat/solicitud/REQUEST_ID/descargar | python3 -m json.tool
```

---

## 📋 Comandos de Laravel

### Ver rutas
```bash
# Ver todas las rutas
php artisan route:list

# Ver solo rutas del SAT
php artisan route:list --path=sat

# Ver rutas con más detalles
php artisan route:list -v
```

### Limpiar caché
```bash
# Limpiar todo el caché
php artisan cache:clear

# Limpiar caché de rutas
php artisan route:clear

# Limpiar caché de configuración
php artisan config:clear

# Limpiar caché de vistas
php artisan view:clear

# Limpiar todo de una vez
php artisan optimize:clear
```

### Regenerar autoload
```bash
composer dump-autoload
```

### Ver logs en tiempo real
```bash
tail -f storage/logs/laravel.log
```

---

## 📁 Gestión de Archivos

### Ver archivos descargados
```bash
# Listar archivos descargados
ls -lh storage/app/sat_downloads/

# Contar archivos descargados
ls storage/app/sat_downloads/ | wc -l

# Ver tamaño total de descargas
du -sh storage/app/sat_downloads/
```

### Limpiar archivos descargados
```bash
# Eliminar todos los archivos descargados (¡cuidado!)
rm -rf storage/app/sat_downloads/*.zip

# Eliminar archivos más antiguos de 30 días
find storage/app/sat_downloads/ -name "*.zip" -mtime +30 -delete
```

### Ver certificados
```bash
# Listar certificados
ls -lh storage/certs/

# Ver información del certificado
openssl x509 -in storage/certs/foos851205ph8.cer -inform DER -text -noout
```

---

## 🔍 Debugging

### Ver logs de errores
```bash
# Ver últimas 50 líneas del log
tail -n 50 storage/logs/laravel.log

# Ver logs en tiempo real
tail -f storage/logs/laravel.log

# Buscar errores específicos
grep "ERROR" storage/logs/laravel.log

# Ver logs de hoy
grep "$(date +%Y-%m-%d)" storage/logs/laravel.log
```

### Modo debug
```bash
# Activar modo debug en .env
# Edita .env y cambia:
APP_DEBUG=true

# Luego limpia el caché
php artisan config:clear
```

### Probar conexión con el SAT
```bash
# Verificar que los certificados sean válidos
php artisan tinker

# Dentro de tinker:
$service = new \App\Services\SATDescargaMasivaService();
echo "Servicio creado exitosamente";
exit
```

---

## 📊 Monitoreo

### Ver uso de disco
```bash
# Ver espacio disponible
df -h

# Ver tamaño del proyecto
du -sh .

# Ver tamaño de storage
du -sh storage/
```

### Ver procesos de PHP
```bash
# Ver procesos de artisan
ps aux | grep artisan

# Matar proceso de artisan (si se quedó colgado)
pkill -f "artisan serve"
```

---

## 🛠️ Mantenimiento

### Actualizar dependencias
```bash
# Ver dependencias desactualizadas
composer outdated

# Actualizar todas las dependencias
composer update

# Actualizar solo la librería del SAT
composer update phpcfdi/sat-ws-descarga-masiva
```

### Permisos
```bash
# Dar permisos correctos a storage
chmod -R 775 storage bootstrap/cache

# Si tienes problemas de permisos
sudo chown -R $USER:www-data storage bootstrap/cache
```

### Backup
```bash
# Crear backup de certificados
tar -czf certs_backup_$(date +%Y%m%d).tar.gz storage/certs/

# Crear backup de descargas
tar -czf downloads_backup_$(date +%Y%m%d).tar.gz storage/app/sat_downloads/

# Crear backup completo del proyecto
tar -czf proyecto_backup_$(date +%Y%m%d).tar.gz \
  --exclude='vendor' \
  --exclude='node_modules' \
  --exclude='storage/logs' \
  .
```

---

## 🧹 Limpieza

### Limpiar archivos temporales
```bash
# Limpiar caché de Laravel
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

# Limpiar logs antiguos
find storage/logs/ -name "*.log" -mtime +30 -delete

# Limpiar archivos de sesión
rm -rf storage/framework/sessions/*

# Limpiar archivos de caché
rm -rf storage/framework/cache/data/*
```

---

## 📦 Despliegue

### Optimizar para producción
```bash
# Optimizar autoloader
composer install --optimize-autoloader --no-dev

# Cachear configuración
php artisan config:cache

# Cachear rutas
php artisan route:cache

# Cachear vistas
php artisan view:cache

# Optimizar todo
php artisan optimize
```

### Revertir optimizaciones (para desarrollo)
```bash
php artisan optimize:clear
```

---

## 🔐 Seguridad

### Generar nueva APP_KEY
```bash
php artisan key:generate
```

### Verificar permisos de certificados
```bash
# Los certificados NO deben ser accesibles públicamente
ls -la storage/certs/

# Deben tener permisos 600 o 644
chmod 600 storage/certs/*.key
chmod 644 storage/certs/*.cer
```

---

## 📝 Testing

### Crear un test
```bash
php artisan make:test SATApiTest
```

### Ejecutar tests
```bash
# Ejecutar todos los tests
php artisan test

# Ejecutar un test específico
php artisan test --filter SATApiTest

# Ejecutar con coverage
php artisan test --coverage
```

---

## 🌐 URLs Útiles

### Locales
- **API Base**: http://localhost:8000/api/v1
- **Test Endpoint**: http://localhost:8000/api/test
- **Health Check**: http://localhost:8000/api/v1/health
- **SAT API**: http://localhost:8000/api/v1/sat/solicitud

### Documentación
- **Laravel Docs**: https://laravel.com/docs
- **SAT WS Descarga Masiva**: https://github.com/phpcfdi/sat-ws-descarga-masiva
- **SAT Portal**: https://www.sat.gob.mx/

---

## 💡 Tips

### Alias útiles (agregar a ~/.zshrc o ~/.bashrc)
```bash
# Alias para artisan
alias art='php artisan'

# Alias para ver logs
alias laravel-log='tail -f storage/logs/laravel.log'

# Alias para limpiar todo
alias laravel-clear='php artisan optimize:clear'

# Alias para iniciar servidor
alias laravel-serve='php artisan serve'
```

### Variables de entorno importantes
```env
# En .env
APP_DEBUG=true              # Activar en desarrollo
APP_ENV=local              # Ambiente
LOG_LEVEL=debug            # Nivel de logs

# Para producción
APP_DEBUG=false
APP_ENV=production
LOG_LEVEL=error
```

---

## 🆘 Solución de Problemas Comunes

### Error: "Class not found"
```bash
composer dump-autoload
php artisan config:clear
```

### Error: "Permission denied"
```bash
chmod -R 775 storage bootstrap/cache
```

### Error: "Port already in use"
```bash
# Usar otro puerto
php artisan serve --port=8001

# O matar el proceso que usa el puerto 8000
lsof -ti:8000 | xargs kill -9
```

### Error: "No application encryption key"
```bash
php artisan key:generate
```

### Servidor muy lento
```bash
# Optimizar
php artisan optimize
composer dump-autoload -o
```

---

## 📞 Ayuda Adicional

Si necesitas más ayuda:
1. Revisa los logs: `storage/logs/laravel.log`
2. Consulta la documentación: `SAT_API_DOCS.md`
3. Revisa los ejemplos: `SAT_EJEMPLOS.md`
4. Ejecuta el test: `./test_sat_api.sh`
