# 🚀 Comandos del Sistema CD-System

## 📋 Índice

1. [Actualización de Assets](#actualización-de-assets)
2. [Actualización de Módulos](#actualización-de-módulos)
3. [Configuración de Proyecto](#configuración-de-proyecto)
4. [Gestión de Usuarios](#gestión-de-usuarios)
5. [Comandos de Utilidad](#comandos-de-utilidad)
6. [Comandos de Limpieza](#comandos-de-limpieza)

---

## 🎨 Actualización de Assets

### `project:update-assets`

Actualiza los assets del proyecto (logos, favicons, skins) y archivos de configuración (`cd-system.php`, `site.php`) desde una carpeta fuente.

**📖 Documentación completa**: Ver [ACTUALIZAR-IDENTIDAD-PROYECTO.md](./core/ACTUALIZAR-IDENTIDAD-PROYECTO.md)

**Sintaxis:**
```bash
php artisan project:update-assets {source_dir} [--project=] [--backup] [--dry-run] [--skip-validation]
```

**Parámetros:**
- `source_dir` (requerido): Directorio fuente con los assets
- `--project=` (opcional): Nombre del proyecto (solo informativo)
- `--backup` (opcional): Crear backup antes de actualizar
- `--dry-run` (opcional): Simular sin aplicar cambios
- `--skip-validation` (opcional): Omitir validación de sintaxis PHP

**Ejemplos:**
```bash
# Actualizar assets con backup
php artisan project:update-assets public/cd-project/assets --backup --project="mi-proyecto"

# Simular cambios (dry-run)
php artisan project:update-assets public/cd-project/assets --dry-run

# Actualizar desde carpeta externa
php artisan project:update-assets /ruta/absoluta/a/assets --backup

# Omitir validación (no recomendado)
php artisan project:update-assets public/cd-project/assets --backup --skip-validation
```

**Assets Requeridos:**
- `logo.png` - Logo principal
- `logo-2.png` - Logo alternativo/loader
- `logo-alternative.png` - Logo para footer
- `favicon.ico` - Favicon ICO
- `favicon-48x48.png` - Favicon 48x48px
- `favicon-96x96.png` - Favicon 96x96px
- `apple-touch-icon.png` - Icono para Apple
- `favicon.svg` - Favicon SVG
- `web-app-manifest-192x192.png` - Icono PWA 192x192
- `web-app-manifest-512x512.png` - Icono PWA 512x512
- `site.webmanifest` - Manifest PWA

**Assets Opcionales:**
- `og-image.png` - Imagen para Open Graph
- `twitter-image.png` - Imagen para Twitter Cards
- `skin-*.css` - Skins CSS personalizados
- `cd-system.php` - Configuración del sistema (demo, módulos)
- `site.php` - Configuración del sitio (identidad, SEO, contenido)

**Ubicaciones de Destino:**
- Logos: `public/cd-project/img/logos/`
- Favicons: `public/cd-project/img/favicon/`
- Skins: `public/template/css/skins/`
- Meta tags: `public/cd-project/img/meta-tags/`
- Configuración: `config/cd-system.php`, `config/site.php` (merge inteligente)

**Características:**
- ✅ Validación automática de sintaxis PHP
- ✅ Validación de estructura de archivos
- ✅ Merge inteligente de configuraciones (no sobrescribe todo)
- ✅ Soporte para modo dry-run
- ✅ Backups automáticos
- ✅ Procesamiento de manifest PWA con corrección de rutas

---

## 📦 Actualización de Módulos

### `modules:refresh`

Refresca todos los módulos activos desde sus archivos JSON.

**Sintaxis:**
```bash
php artisan modules:refresh [--clean] [--modules=*]
```

**Opciones:**
- `--clean`: Limpiar todos los datos antes de cargar
- `--modules=*`: Módulos específicos a actualizar (services, blog, references, team, faqs, products)

**Ejemplos:**
```bash
# Actualizar todos los módulos activos
php artisan modules:refresh

# Actualizar todos los módulos con limpieza previa
php artisan modules:refresh --clean

# Actualizar módulos específicos
php artisan modules:refresh --modules=services --modules=blog

# Actualizar módulos específicos con limpieza
php artisan modules:refresh --clean --modules=services --modules=blog
```

**Módulos Disponibles:**
- `projects` - Proyectos
- `gallery` - Galería
- `services` - Servicios
- `blog` - Blog/Noticias
- `references` - Referencias
- `team` - Equipo
- `faqs` - Preguntas Frecuentes
- `products` - Productos

---

### `services:refresh`

Refresca servicios desde el archivo JSON.

**Sintaxis:**
```bash
php artisan services:refresh [--clean]
```

**Opciones:**
- `--clean`: Eliminar todos los servicios y categorías antes de cargar

**Archivo JSON:**
- `database/seeders/project-data/services.json`

**Ejemplos:**
```bash
# Actualizar servicios (incremental)
php artisan services:refresh

# Limpiar y cargar desde cero
php artisan services:refresh --clean
```

**Comportamiento:**
- Sin `--clean`: Usa `updateOrCreate` (no duplica si ya existe)
- Con `--clean`: Elimina todos los servicios y categorías antes de cargar

---

### `blog:refresh`

Refresca blog (posts y categorías) desde el archivo JSON.

**Sintaxis:**
```bash
php artisan blog:refresh [--clean]
```

**Opciones:**
- `--clean`: Eliminar todas las categorías antes de cargar (los posts siempre se limpian)

**Archivo JSON:**
- `database/seeders/project-data/blog.json`

**Ejemplos:**
```bash
# Actualizar blog
php artisan blog:refresh

# Limpiar categorías y cargar desde cero
php artisan blog:refresh --clean
```

**Comportamiento:**
- **Siempre limpia posts** antes de cargar (independiente de `--clean`)
- Con `--clean`: También limpia categorías antes de cargar

---

### `faqs:refresh`

Refresca FAQs desde el archivo JSON.

**Sintaxis:**
```bash
php artisan faqs:refresh [--clean]
```

**Opciones:**
- `--clean`: Eliminar todos los FAQs y categorías antes de cargar

**Archivo JSON:**
- `database/seeders/project-data/faqs.json`

**Ejemplos:**
```bash
# Actualizar FAQs (incremental)
php artisan faqs:refresh

# Limpiar y cargar desde cero
php artisan faqs:refresh --clean
```

**Comportamiento:**
- Sin `--clean`: Usa `updateOrCreate` (no duplica si ya existe)
- Con `--clean`: Elimina todos los FAQs y categorías antes de cargar

---

### `projects:refresh`

Refresca proyectos desde el archivo JSON.

**Sintaxis:**
```bash
php artisan projects:refresh [--clean]
```

**Opciones:**
- `--clean`: Eliminar todos los proyectos, categorías y tags antes de cargar

**Archivo JSON:**
- `database/seeders/project-data/projects.json`

**Ejemplos:**
```bash
# Actualizar proyectos (incremental)
php artisan projects:refresh

# Limpiar y cargar desde cero
php artisan projects:refresh --clean
```

**Comportamiento:**
- Sin `--clean`: Usa `updateOrCreate` (no duplica si ya existe)
- Con `--clean`: Elimina todos los proyectos, categorías y tags antes de cargar

---

### `gallery:refresh`

Refresca galería desde el archivo JSON.

**Sintaxis:**
```bash
php artisan gallery:refresh [--clean]
```

**Opciones:**
- `--clean`: Eliminar todos los items de galería, categorías y tags antes de cargar

**Archivo JSON:**
- `database/seeders/project-data/gallery.json`

**Ejemplos:**
```bash
# Actualizar galería (incremental)
php artisan gallery:refresh

# Limpiar y cargar desde cero
php artisan gallery:refresh --clean
```

**Comportamiento:**
- Sin `--clean`: Usa `updateOrCreate` (no duplica si ya existe)
- Con `--clean`: Elimina todos los items de galería, categorías y tags antes de cargar

---

### `products:refresh`

Refresca productos desde el archivo JSON.

**Sintaxis:**
```bash
php artisan products:refresh [--clean]
```

**Opciones:**
- `--clean`: Eliminar todos los productos, categorías y tags antes de cargar

**Archivo JSON:**
- `database/seeders/project-data/products.json`

**Ejemplos:**
```bash
# Actualizar productos (incremental)
php artisan products:refresh

# Limpiar y cargar desde cero
php artisan products:refresh --clean
```

**Comportamiento:**
- Sin `--clean`: Usa `updateOrCreate` (no duplica si ya existe)
- Con `--clean`: Elimina todos los productos, categorías y tags antes de cargar

---

### `team:refresh`

Refresca miembros del equipo desde el archivo JSON.

**Sintaxis:**
```bash
php artisan team:refresh [--clean]
```

**Opciones:**
- `--clean`: Eliminar todos los miembros y categorías antes de cargar

**Archivo JSON:**
- `database/seeders/project-data/team.json`

**Ejemplos:**
```bash
# Actualizar equipo (incremental)
php artisan team:refresh

# Limpiar y cargar desde cero
php artisan team:refresh --clean
```

**Comportamiento:**
- Sin `--clean`: Usa `updateOrCreate` por email (no duplica si ya existe)
- Con `--clean`: Elimina todos los miembros y categorías antes de cargar

---

### `references:refresh`

Refresca referencias desde el archivo JSON.

**Sintaxis:**
```bash
php artisan references:refresh [--clean]
```

**Opciones:**
- `--clean`: Opcional (siempre limpia independientemente de esta opción)

**Archivo JSON:**
- `database/seeders/project-data/references.json`

**Ejemplos:**
```bash
# Actualizar referencias
php artisan references:refresh

# Con flag clean (comportamiento idéntico)
php artisan references:refresh --clean
```

**Comportamiento:**
- **Siempre limpia** referencias y categorías antes de cargar (independiente de `--clean`)

---

## ⚙️ Configuración de Proyecto

### `project:customize-identity`

Personaliza la identidad del proyecto en `config/site.php`.

**Sintaxis:**
```bash
php artisan project:customize-identity [--name=] [--url=] [--email=] [--description=] [--author=]
```

**Opciones:**
- `--name=`: Nombre del sitio
- `--url=`: URL del sitio
- `--email=`: Email de contacto
- `--description=`: Descripción SEO
- `--author=`: Autor del proyecto

**Ejemplos:**
```bash
# Actualizar nombre y URL
php artisan project:customize-identity --name="Mi Empresa" --url="www.miempresa.com"

# Actualizar identidad completa
php artisan project:customize-identity \
  --name="Mi Empresa" \
  --url="www.miempresa.com" \
  --email="contacto@miempresa.com" \
  --description="Descripción SEO del sitio" \
  --author="Nombre del Autor"
```

**Nota:** Crea un backup automático de `config/site.php` antes de modificar.

---

### `project:configure-modules`

Configura el demo y módulos activos en `config/cd-system.php`.

**Sintaxis:**
```bash
php artisan project:configure-modules --demo={demo} --modules={modules}
```

**Parámetros:**
- `--demo={demo}`: Nombre del demo (ej: demo-law-firm-2, demo-construction)
- `--modules={modules}`: Módulos a activar separados por comas (ej: blog,services,team)

**Ejemplos:**
```bash
# Configurar demo y módulos
php artisan project:configure-modules --demo=demo-law-firm-2 --modules=blog,services,team,references

# Configurar solo demo
php artisan project:configure-modules --demo=demo-construction
```

---

### `project:manage-skins`

Gestiona los skins del proyecto.

**Sintaxis:**
```bash
php artisan project:manage-skins [opciones]
```

**Ejemplos:**
```bash
php artisan project:manage-skins
```

---

### `project:manage-layouts`

Gestiona los layouts dinámicos del proyecto.

**Sintaxis:**
```bash
php artisan project:manage-layouts [opciones]
```

**Ejemplos:**
```bash
php artisan project:manage-layouts
```

---

### `project:copy-porto-skins`

Gestiona los skins del template interno del proyecto.

**Sintaxis:**
```bash
php artisan project:copy-porto-skins [opciones]
```

**Ejemplos:**
```bash
php artisan project:copy-porto-skins
```

---

## 👥 Gestión de Usuarios

### `users:refresh`

Refresca usuarios desde el archivo JSON.

**Sintaxis:**
```bash
php artisan users:refresh [--clean]
```

**Opciones:**
- `--clean`: Eliminar todos los usuarios antes de cargar (con confirmación si hay posts asociados)

**Archivo JSON:**
- `database/seeders/project-data/users.json`

**Ejemplos:**
```bash
# Actualizar usuarios (incremental)
php artisan users:refresh

# Limpiar y cargar desde cero
php artisan users:refresh --clean
```

**Comportamiento:**
- Sin `--clean`: Usa `updateOrCreate` por email (no duplica si ya existe)
- Con `--clean`: 
  - Verifica si hay posts de blog asociados
  - Si hay posts, solicita confirmación (por cascada de eliminación)
  - Elimina todos los usuarios antes de cargar

**Advertencia:** El comando `--clean` puede eliminar posts de blog si hay relaciones de cascada configuradas.

---

## 🛠️ Comandos de Utilidad

### `demo:set`

Establece el demo activo del sistema.

**Sintaxis:**
```bash
php artisan demo:set {demo} [--force]
```

**Parámetros:**
- `{demo}`: Nombre del demo a establecer
- `--force`: Forzar cambio sin validación

**Ejemplos:**
```bash
# Establecer demo
php artisan demo:set demo-law-firm-2

# Forzar cambio
php artisan demo:set demo-construction --force
```

---

### `demo:switch`

Cambia entre demos disponibles.

**Sintaxis:**
```bash
php artisan demo:switch [opciones]
```

**Ejemplos:**
```bash
php artisan demo:switch
```

---

### `demo:manage`

Gestiona el sistema de demos.

**Sintaxis:**
```bash
php artisan demo:manage [opciones]
```

**Ejemplos:**
```bash
php artisan demo:manage
```

---

## 🧹 Comandos de Limpieza

### Limpiar Cache

```bash
# Limpiar cache de configuración
php artisan config:clear

# Limpiar cache general
php artisan cache:clear

# Limpiar cache de vistas
php artisan view:clear

# Limpiar cache de rutas
php artisan route:clear
```

### Limpiar Todo

```bash
# Limpiar todos los caches
php artisan config:clear && php artisan cache:clear && php artisan view:clear && php artisan route:clear
```

---

## 📊 Resumen de Comportamientos

### Módulos que Siempre Limpian

Estos módulos **siempre limpian** los datos antes de cargar, independientemente de `--clean`:

| Módulo | Comando | Limpia Siempre |
|--------|---------|----------------|
| Referencias | `references:refresh` | ✅ Referencias y categorías |
| Blog | `blog:refresh` | ✅ Posts (categorías solo con `--clean`) |

### Módulos con Limpieza Opcional

Estos módulos solo limpian si usas `--clean`:

| Módulo | Comando | Limpia con `--clean` |
|--------|---------|----------------------|
| Proyectos | `projects:refresh` | ✅ Proyectos, categorías y tags |
| Galería | `gallery:refresh` | ✅ Items, categorías y tags |
| Servicios | `services:refresh` | ✅ Servicios y categorías |
| Equipo | `team:refresh` | ✅ Miembros y categorías |
| FAQs | `faqs:refresh` | ✅ FAQs y categorías |
| Productos | `products:refresh` | ✅ Productos, categorías y tags |
| Usuarios | `users:refresh` | ✅ Usuarios (con confirmación si hay posts) |

---

## 🎯 Flujos de Trabajo Comunes

### Actualizar Assets de un Proyecto

```bash
# 1. Copiar assets a carpeta temporal
cp /ruta/a/assets/* public/cd-project/assets-temp/

# 2. Actualizar assets con backup
php artisan project:update-assets public/cd-project/assets-temp --backup --project="mi-proyecto"

# 3. Verificar
ls -la public/cd-project/img/logos/
ls -la public/cd-project/img/favicon/

# 4. Limpiar temporal
rm -rf public/cd-project/assets-temp
```

### Actualizar Todos los Módulos

```bash
# Actualizar todos los módulos con limpieza
php artisan modules:refresh --clean

# O actualizar módulos específicos
php artisan modules:refresh --clean --modules=services --modules=blog
```

### Actualizar Módulo Individual

```bash
# Actualizar proyectos desde cero
php artisan projects:refresh --clean

# Actualizar galería desde cero
php artisan gallery:refresh --clean

# Actualizar servicios desde cero
php artisan services:refresh --clean

# Actualizar blog (siempre limpia posts)
php artisan blog:refresh --clean

# Actualizar FAQs desde cero
php artisan faqs:refresh --clean
```

### Configurar Proyecto Completo

```bash
# 1. Configurar identidad
php artisan project:customize-identity \
  --name="Mi Empresa" \
  --url="www.miempresa.com" \
  --email="contacto@miempresa.com"

# 2. Configurar módulos
php artisan project:configure-modules --demo=demo-law-firm-2 --modules=blog,services,team

# 3. Actualizar assets
php artisan project:update-assets public/cd-project/assets --backup

# 4. Cargar datos
php artisan modules:refresh --clean

# 5. Limpiar cache
php artisan config:clear && php artisan cache:clear && php artisan view:clear
```

---

## 📁 Ubicación de Archivos JSON

Todos los archivos JSON de datos se encuentran en:

```
database/seeders/project-data/
├── services.json      # Servicios y categorías
├── team.json          # Equipo y categorías
├── references.json    # Referencias y categorías
├── blog.json          # Posts y categorías
├── faqs.json          # FAQs y categorías
├── products.json      # Productos, categorías y tags
└── users.json         # Usuarios
```

---

## ⚠️ Advertencias Importantes

1. **Backup antes de `--clean`**: Los comandos con `--clean` eliminan datos permanentemente. Considera hacer backup antes.

2. **Cascada de eliminación**: `users:refresh --clean` puede eliminar posts de blog si hay relaciones de cascada configuradas.

3. **Referencias y Blog**: Estos módulos siempre limpian datos, independientemente de `--clean`.

4. **Assets requeridos**: El comando `project:update-assets` requiere archivos con nombres exactos (case-sensitive).

---

## 🔍 Verificación de Comandos

Para ver todos los comandos disponibles:

```bash
php artisan list
```

Para ver ayuda de un comando específico:

```bash
php artisan {comando} --help
```

Ejemplo:
```bash
php artisan project:update-assets --help
php artisan services:refresh --help
```

---

**Última actualización:** 2024-12-19  
**Versión del sistema:** CD-System Base

