# Plan de desarrollo: Nuevo proyecto con vistas Blade de otro repositorio

Este documento es el plan paso a paso para dar de alta un **nuevo proyecto** en CD-System usando:
- **Nueva base de datos** con arquitectura tenant (todo en DB)
- **Módulos activos:** Users, Blog, Proyectos, Faqs, Gallery, News
- **Vistas Blade y diseño** que tenés en otro proyecto (repositorio externo)

---

## Resumen del flujo

| Fase | Qué hacemos | Resultado |
|------|-------------|-----------|
| **0** | Crear DB + configurar .env | Proyecto apuntando a su propia DB |
| **1** | Definir demo + módulos en `cd-system.json` | Config en DB (tenant) |
| **2** | Integrar vistas Blade del otro proyecto | Demo nuevo o reutilizar existente |
| **3** | Layout (header/footer), CSS, assets | Diseño unificado |
| **4** | Seeders (site-data, assets, contenido) + validación | Sitio listo |

**Principio:** Una DB = un proyecto. La configuración (demo, módulos, site data) se guarda en la **base de datos** vía seeders que leen los JSON en `database/seeders/project-data/`.

---

## Fase 0: Nueva base de datos y .env

### 0.1 Crear la base de datos

En MySQL (o tu motor):

```sql
CREATE DATABASE bp_nuevoproyecto CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```

(Reemplazá `bp_nuevoproyecto` por el nombre que quieras para este proyecto.)

### 0.2 Configurar .env para este proyecto

En `.env` (o una copia para este proyecto):

```env
APP_NAME="Nombre del Proyecto"
DB_DATABASE=bp_nuevoproyecto
DB_USERNAME=tu_usuario
DB_PASSWORD=tu_password
```

### 0.3 Ejecutar migraciones

```bash
php artisan migrate
```

Si preferís tablas limpias:

```bash
php artisan migrate:fresh
```

**No ejecutar todavía** los seeders si querés seguir el plan fase por fase.

---

## Fase 1: Configuración del proyecto en DB (cd-system.json)

La “arquitectura tenant” en CD-System significa: **demo y módulos se leen de la DB**. Esos datos se cargan desde el archivo `cd-system.json` mediante `CdSystemSeeder`.

### 1.1 Definir el demo

Tenés dos caminos (ver Fase 2 para detalles):

- **Opción A:** Usar un **demo existente** del codebase (ej. `demo-digital-agency-2`, `demo-restaurant`) y solo cambiar textos/assets.
- **Opción B:** Crear un **demo nuevo** (ej. `demo-mi-proyecto`) copiando/adaptando las vistas del otro repositorio.

Por ahora anotá el nombre del demo que vas a usar (ej. `demo-digital-agency-2` o `demo-mi-proyecto`).

### 1.2 Editar `database/seeders/project-data/cd-system.json`

Dejá algo así, ajustando **solo** los módulos que necesitás (Users no se activa por módulo; el resto sí):

```json
{
  "theme": {
    "demo": "demo-digital-agency-2",
    "skin": "auto",
    "fonts": {
      "primary": "Lexend",
      "secondary": "Lexend",
      "tertiary": "Open Sans"
    }
  },
  "modules": {
    "blog":       { "active": true,  "navigation": { "header": true, "footer": true } },
    "projects":   { "active": true,  "navigation": { "header": true, "footer": true } },
    "faqs":       { "active": true,  "navigation": { "header": false, "footer": true } },
    "gallery":    { "active": true,  "navigation": { "header": true, "footer": true } },
    "news":       { "active": true,  "navigation": { "header": true, "footer": true } },
    "about":      { "active": true,  "navigation": { "header": true, "footer": true } },
    "contact":    { "active": true,  "navigation": { "header": true, "footer": true } },
    "menu":       { "active": false, "navigation": { "header": false, "footer": false } },
    "products":   { "active": false, "navigation": { "header": false, "footer": false } },
    "services":   { "active": false, "navigation": { "header": false, "footer": false } },
    "team":       { "active": false, "navigation": { "header": false, "footer": false } },
    "references": { "active": false, "navigation": { "header": false, "footer": false } },
    "newsletter": { "active": false },
    "project-setup": { "active": false },
    "translations": { "active": false }
  },
  "maintenance": { "enabled": false, "allowed_ips": ["127.0.0.1", "::1"] }
}
```

- **Users:** no es un módulo de contenido; los usuarios se cargan con `ProjectsUsersSeeder` (y roles con `RolesSeeder`). No hace falta activar nada de “users” en `cd-system.json`.
- **Blog, Proyectos, Faqs, Gallery, News:** los dejás en `active: true` y en `navigation` según quieras header/footer.

### 1.3 Cargar la config en la DB

```bash
php artisan db:seed --class=CdSystemSeeder
php artisan cache:clear
php artisan config:clear
```

A partir de acá, el proyecto (esta DB) tiene demo y módulos definidos en DB (tenant).

---

## Fase 2: Integrar las vistas Blade del otro proyecto

El controlador de la homepage (y about/contact) usa `DemoViewHelper::getDemoView('welcome')`, que resuelve a:

`resources/views/modules/cd-base/frontend/demos/{theme.demo}/{vista}.blade.php`

Por ejemplo, si `theme.demo` es `demo-restaurant`, la welcome es  
`.../demos/demo-restaurant/welcome.blade.php`.

### Opción A: Reutilizar un demo existente

Si el diseño del otro proyecto se parece a un demo que ya existe en CD-System (por ejemplo `demo-digital-agency-2`):

1. En `cd-system.json` dejá `"theme": { "demo": "demo-digital-agency-2", ... }`.
2. No hace falta copiar vistas; solo ajustá **site-data**, **assets** (logos, imágenes) y contenido (seeders) para que coincidan con el otro proyecto.
3. Si en el otro proyecto tenés **textos o bloques** distintos, podés sobrescribir solo algunas vistas: copiá del otro repo las blade que quieras cambiar a la carpeta del demo existente (ej. `demos/demo-digital-agency-2/`) y adaptá rutas/variables (ver abajo).

### Opción B: Crear un demo nuevo con las vistas del otro repo

Si querés que el diseño sea exactamente el del otro proyecto:

#### 2.1 Crear la carpeta del demo

En CD-System:

```
resources/views/modules/cd-base/frontend/demos/demo-mi-proyecto/
├── welcome.blade.php
├── about.blade.php
├── contact.blade.php
└── (otras que necesites: menu.blade.php, etc.)
```

Copiá desde el **otro repositorio** las vistas equivalentes (home, about, contact, etc.) a esta carpeta.

#### 2.2 Adaptar las vistas copiadas

En cada Blade del otro proyecto suele haber:

- **Layout:** Cambiar a que extiendan el master de CD-System, por ejemplo:
  ```blade
  @extends('layout.front.master')
  @section('content')
    ... contenido que copiaste ...
  @endsection
  ```
- **Rutas:** Reemplazar URLs fijas por `{{ route('nombre') }}` o `{{ url('/ruta') }}` según las rutas definidas en `routes/` de CD-System.
- **Imágenes/Assets:** Usar `{{ asset('cd-project/...') }}` o `{{ asset(config('site.assets.main_logo')) }}` según corresponda.
- **Formulario de contacto:** Incluir `@csrf` y apuntar a la ruta de contacto que use CD-System (ej. `route('contact.store')`).
- **Módulos:** Envolver bloques que dependan de Blog, Proyectos, Faqs, Gallery, News con `@if(is_module_active('blog'))` (y equivalente para `projects`, `faqs`, `gallery`, `news`).

#### 2.3 Registrar el demo en el codebase

Para que el sistema reconozca el nuevo demo tenés que registrar:

1. **`app/helpers.php` – `get_demo_layout_mapping()`**  
   Agregar una entrada, por ejemplo:
   ```php
   'demo-mi-proyecto' => [
       'header' => 'demo-mi-proyecto',
       'footer' => 'demo-mi-proyecto',
       'sidebar' => 'default',
       'description' => 'Template del proyecto externo',
   ],
   ```

2. **`app/helpers.php` – `get_demo_skin_mapping()`**  
   Si tenés CSS específico (skin):
   ```php
   'demo-mi-proyecto' => 'skin-mi-proyecto',
   ```
   Si no tenés skin, podés reutilizar uno existente, ej. `'demo-mi-proyecto' => 'skin-digital-agency-2'`.

3. **`config/page-headers.php`**  
   Agregar el demo y, por cada módulo que use page-header, si es “classic” o “modern” (copiá de otro demo si no estás seguro).

4. **Layout master**  
   En `resources/views/layout/front/master.blade.php` (o donde se defina la clase del `<html>`), que cuando el demo activo sea `demo-mi-proyecto` se use la clase correspondiente (ej. `html.demo-mi-proyecto`), si el tema lo usa.

5. **`cd-system.json`**  
   Poner en `theme.demo` el nombre del nuevo demo: `"demo": "demo-mi-proyecto"`.

No hace falta tocar `DemoViewHelper`: ya usa `config('cd-system.theme.demo')`, que sale de la DB una vez corrido `CdSystemSeeder`.

---

## Fase 3: Layout (header/footer), CSS y assets

### 3.1 Header y footer

Si creaste **demo nuevo** (Opción B), tenés que tener vistas de header y footer que el layout use. En CD-System eso se resuelve con `get_demo_layout_mapping()`: cada demo tiene `header` y `footer` que apuntan a nombres de partials.

- **Archivos típicos:**
  - `resources/views/layout/front/headers/demo-mi-proyecto.blade.php`
  - `resources/views/layout/front/footers/demo-mi-proyecto.blade.php`

Podés copiarlos del otro proyecto y adaptar:

- Logo: `{{ asset(config('site.assets.main_logo')) }}`
- Menú: usar `get_dynamic_navigation('header')` o la estructura que use CD-System.
- Enlaces de módulos: envolver con `@if(is_module_active('blog'))` etc.
- Contacto y redes: `config('site.contact')`, `config('site.social_media')`.

Si **reutilizás un demo existente** (Opción A), usás sus headers/footers y solo cambiás site-data y assets.

### 3.2 CSS del demo

- Si el otro proyecto trae su propio CSS:
  - Copiá los CSS a `public/template/css/demos/demo-mi-proyecto.css` (y skins a `public/template/css/skins/skin-mi-proyecto.css` si aplica).
- En el layout/master se cargan según el demo/skin; si reutilizás skin de otro demo, no hace falta nuevo archivo de skin.

### 3.3 Assets del proyecto (logos, favicon, og-image)

- Subir/copiar archivos a `public/cd-project/assets/` (o la estructura que use tu proyecto).
- Completar `database/seeders/project-data/assets.json` con cada asset (path, type, name).
- Completar `database/seeders/project-data/site-data.json` con referencias a esos assets (main_logo, favicon, og.image, etc.).

Luego:

```bash
php artisan db:seed --class=AssetsSeeder
php artisan db:seed --class=SiteDataSeeder
```

---

## Fase 4: Site data, analytics y contenido (módulos)

### 4.1 Site data y analytics

- Completar `database/seeders/project-data/site-data.json` (nombre del sitio, tagline, contacto, redes, footer, seo, etc.).
- Completar `database/seeders/project-data/analytics.json` (Google Analytics si aplica).

Ejecutar:

```bash
php artisan db:seed --class=SiteDataSeeder
php artisan db:seed --class=AnalyticsSeeder
```

### 4.2 Contenido de módulos (Blog, Proyectos, Faqs, Gallery, News)

El **Project_Seeder** solo ejecuta seeders de módulos con `active: true` en la config que cargó `CdSystemSeeder`. Para Blog, Proyectos, Faqs, Gallery y News necesitás los JSON correspondientes en `database/seeders/project-data/`:

- `blog.json`
- `projects.json` (para Proyectos)
- `faqs.json`
- `gallery.json`
- `news.json`

Si ya tenés datos en el otro proyecto, podés exportarlos a estos JSON con la estructura que esperan los seeders existentes (revisar `BlogSeeder`, `ProjectsSeeder`, `FaqsSeeder`, `GallerySeeder`, `NewsSeeder`).

Luego:

```bash
php artisan db:seed --class=Project_Seeder
```

O ejecutar seeders individuales si preferís no correr todo.

### 4.3 Usuarios

Los usuarios no se activan como “módulo” en `cd-system.json`. Se cargan con:

- `RolesSeeder`
- `ProjectsUsersSeeder` (que usa algo como `database/seeders/project-data/users.json`)

Dejá `users.json` con los usuarios de este proyecto y ejecutá esos seeders (o el `Project_Seeder` si ya los incluye en el orden correcto).

---

## Orden recomendado de ejecución (una vez todo listo)

1. `php artisan migrate:fresh` (si DB nueva y querés limpia).
2. `php artisan db:seed --class=CdSystemSeeder`
3. `php artisan db:seed --class=AssetsSeeder`
4. `php artisan db:seed --class=SiteDataSeeder`
5. `php artisan db:seed --class=AnalyticsSeeder`
6. `php artisan db:seed --class=RolesSeeder`
7. `php artisan db:seed --class=ProjectsUsersSeeder`
8. `php artisan db:seed --class=Project_Seeder` (o los seeders de módulos que quieras).
9. `php artisan cache:clear` y `php artisan config:clear` (y `view:clear` si tocaste vistas).

O en un solo paso:

```bash
php artisan migrate:fresh --seed
php artisan cache:clear
php artisan config:clear
php artisan view:clear
```

(si `DatabaseSeeder` llama a `Project_Seeder` y tenés todos los JSON listos).

---

## Checklist final

- [ ] **Fase 0:** DB creada, `.env` con `DB_DATABASE` correcto, migraciones corridas.
- [ ] **Fase 1:** `cd-system.json` con `theme.demo` correcto y módulos Blog, Proyectos, Faqs, Gallery, News activos; `CdSystemSeeder` ejecutado.
- [ ] **Fase 2:** Vistas Blade integradas (demo existente o nuevo); si demo nuevo: registrado en `get_demo_layout_mapping()`, `get_demo_skin_mapping()`, `page-headers.php` y master.
- [ ] **Fase 3:** Header y footer del demo creados/adaptados; CSS y assets en `public/`; `assets.json` y `site-data.json` completos; AssetsSeeder y SiteDataSeeder ejecutados.
- [ ] **Fase 4:** `site-data.json` y `analytics.json` completos; JSON de blog, projects, faqs, gallery, news (y users) listos; seeders ejecutados.
- [ ] **Validación:** Home, about, contact y rutas de Blog, Proyectos, Faqs, Gallery, News responden; header/footer muestran solo módulos activos; logo y datos de contacto correctos.

---

## Resumen: Cómo encaja “todo en DB” con las vistas del otro proyecto

- **En DB (tenant):** demo activo, módulos activos, site data (nombre, contacto, redes, seo), assets (URLs de logos, etc.), analytics. Eso se carga desde los JSON en `database/seeders/project-data/` mediante seeders; no hace falta tocar archivos de config del proyecto en Git para cambiar de cliente.
- **En código (repositorio):** las vistas Blade (welcome, about, contact, header, footer) y el registro del demo (layout mapping, skin mapping, page-headers). Si las vistas vienen de otro repo, las copiás/adaptás una vez a la estructura de demos de CD-System y opcionalmente registrás un demo nuevo; después, qué proyecto use ese demo se elige solo con `theme.demo` en `cd-system.json` y la DB de ese proyecto.

Cuando quieras, podemos bajar a un paso concreto (por ejemplo “solo Fase 2” o “solo registro del demo nuevo”) y lo hacemos paso a paso en el repo.
