# Estructura de Archivos - CD-System

Documentación de la organización de archivos y directorios del sistema, separando claramente qué es core (reutilizable) y qué es específico del proyecto.

---

## 📋 Tabla de Contenidos

1. [Estructura General](#estructura-general)
2. [Archivos Core (Sistema Base)](#archivos-core-sistema-base)
3. [Archivos Proyecto (Específicos)](#archivos-proyecto-específicos)
4. [Separación Core vs Proyecto](#separación-core-vs-proyecto)
5. [Convenciones de Nombres](#convenciones-de-nombres)

---

## 🏗️ Estructura General

### Árbol de Directorios Principal

```
cd-system/
├── app/                          # Código de aplicación
│   ├── Core/                     # Componentes core
│   ├── Helpers/                  # Helpers especializados
│   ├── Modules/                  # Módulos del sistema
│   └── helpers.php               # Helpers globales
├── config/                       # Configuraciones
│   ├── cd-system.php             # Config principal (PROTEGIDO)
│   ├── site.php                  # Config del sitio
│   └── projectTexts.json         # Textos del proyecto (opcional)
├── database/
│   ├── migrations/               # Migraciones core
│   └── seeders/
│       └── project-data/         # Datos específicos del proyecto
│           ├── services.json
│           ├── blog.json
│           ├── team.json
│           └── references.json
├── public/
│   └── cd-project/               # Assets del proyecto
│       └── img/
│           ├── logos/
│           ├── favicon/
│           └── demos/
│               └── {demo}/
├── resources/
│   └── views/
│       ├── layout/
│       │   └── front/
│       │       ├── headers/
│       │       │   ├── {demo}.blade.php
│       │       │   └── default.blade.php
│       │       └── footers/
│       │           ├── {demo}.blade.php
│       │           └── default.blade.php
│       └── modules/
│           └── {module}/
│               └── frontend/
│                   └── demos/
│                       └── {demo}/
│                           └── welcome.blade.php
└── routes/
    ├── web.php                   # Rutas base
    ├── front.php                  # Rutas frontend
    └── modules/                   # Rutas de módulos
```

---

## 🧩 Archivos Core (Sistema Base)

### Componentes Core

**Ubicación**: `app/Core/`

```
app/Core/
├── Adapters/
│   ├── Theme.php                 # Gestión de tema/demo
│   ├── Util.php                  # Utilidades generales
│   └── ...
├── Bootstraps/
│   └── Bootstrap{Demo}.php      # Bootstraps por demo
├── Components.php
├── Data.php
├── Menu.php
└── Theme.php
```

**Estado**: ✅ Core - NO se modifica por proyecto

### Helpers Globales

**Ubicación**: `app/helpers.php`

**Contenido**:
- Funciones helper globales
- Mapeos demo → skin
- Mapeos demo → layouts
- Funciones de utilidad

**Estado**: ✅ Core - Se propaga del core a proyectos

### Helpers Especializados

**Ubicación**: `app/Helpers/`

```
app/Helpers/
├── MetaTagsHelper.php            # Gestión de meta tags SEO
├── PageHeaderHelper.php           # Gestión de page headers
└── ...
```

**Estado**: ✅ Core - Se propaga del core a proyectos

### Módulos

**Ubicación**: `app/Modules/`

```
app/Modules/
├── Blog/
│   ├── Controllers/
│   ├── Models/
│   ├── Resources/
│   │   └── views/
│   │       ├── admin/
│   │       └── frontend/
│   └── Routes/
├── Services/
├── Team/
└── ...
```

**Estado**: ✅ Core - Código de módulos es core, pero se activa/desactiva por proyecto

### Rutas Base

**Ubicación**: `routes/`

```
routes/
├── web.php                        # Rutas base
├── front.php                      # Rutas frontend
├── cd-system.php                  # Rutas del sistema
└── modules/                       # Rutas de módulos
    ├── blog.php
    ├── services.php
    └── ...
```

**Estado**: ✅ Core - Rutas base son core

### Configuraciones Base

**Ubicación**: `config/`

```
config/
├── cd-system.php                  # ⚠️ PROTEGIDO (versión base)
├── site.php                       # Config base del sitio
├── page-headers.php               # Config de page headers
└── ...
```

**Estado**: 
- `cd-system.php` (base): ✅ Core
- `site.php`: ✅ Core (pero puede sobrescribirse)

---

## 📁 Archivos Proyecto (Específicos)

### Configuraciones del Proyecto

**Ubicación**: `config/`

```
config/
├── cd-system.php                  # ⚠️ Versión del proyecto (PROTEGIDO)
├── site.php                       # Puede sobrescribirse
└── projectTexts.json              # Textos específicos (opcional)
```

**Estado**: 
- `cd-system.php` (proyecto): ❌ Específico - NO se propaga
- `site.php` (sobrescrito): ❌ Específico - NO se propaga
- `projectTexts.json`: ❌ Específico - NO se propaga

### Datos del Proyecto

**Ubicación**: `database/seeders/project-data/`

```
database/seeders/project-data/
├── services.json                  # Servicios/Áreas de actuación
├── blog.json                      # Posts y categorías
├── team.json                      # Miembros del equipo
└── references.json                # Referencias/Clientes
```

**Estado**: ❌ Específico - NO se propaga

### Assets del Proyecto

**Ubicación**: `public/cd-project/`

```
public/cd-project/
├── img/
│   ├── logos/
│   │   ├── logo.png
│   │   ├── logo-2.png
│   │   └── logo-alternative.png
│   ├── favicon/
│   │   ├── favicon.ico
│   │   ├── apple-touch-icon.png
│   │   └── ...
│   └── demos/
│       └── {demo}/
│           ├── slides/
│           ├── team/
│           ├── icons/
│           └── ...
└── css/                           # CSS custom (si aplica)
```

**Estado**: ❌ Específico - NO se propaga

### Vistas Específicas del Demo

**Ubicación**: `resources/views/modules/{module}/frontend/demos/{demo}/`

```
resources/views/modules/
└── cd-base/
    └── frontend/
        └── demos/
            └── demo-law-firm-2/
                └── welcome.blade.php
```

**Estado**: ❌ Específico - NO se propaga (pero puede servir de referencia)

### Layouts Específicos del Demo

**Ubicación**: `resources/views/layout/front/{component}s/`

```
resources/views/layout/front/
├── headers/
│   ├── demo-law-firm-2.blade.php
│   ├── demo-construction.blade.php
│   └── default.blade.php
└── footers/
    ├── demo-law-firm-2.blade.php
    ├── demo-construction.blade.php
    └── default.blade.php
```

**Estado**: 
- Layouts específicos: ⚠️ Pueden propagarse si son mejoras al core
- Layouts default: ✅ Core

---

## 🔀 Separación Core vs Proyecto

### Regla General

**Core (Reutilizable)**:
- Código que funciona para múltiples proyectos
- Componentes, helpers, módulos base
- Configuraciones base/neutrales
- Vistas genéricas de módulos

**Proyecto (Específico)**:
- Configuraciones específicas (demo, módulos activos)
- Datos del proyecto (JSON de seeders)
- Assets (logos, imágenes)
- Personalizaciones visuales específicas

### Matriz de Separación

| Tipo de Archivo | Core | Proyecto | Propagación |
|----------------|------|----------|-------------|
| `app/Core/` | ✅ | ❌ | Core → Proyecto |
| `app/Helpers/` | ✅ | ❌ | Core → Proyecto |
| `app/helpers.php` | ✅ | ❌ | Core → Proyecto |
| `app/Modules/` | ✅ | ❌ | Core → Proyecto |
| `config/cd-system.php` (base) | ✅ | ❌ | Core → Proyecto |
| `config/cd-system.php` (proyecto) | ❌ | ✅ | ❌ NO se propaga |
| `config/site.php` (base) | ✅ | ❌ | Core → Proyecto |
| `config/site.php` (sobrescrito) | ❌ | ✅ | ❌ NO se propaga |
| `config/projectTexts.json` | ❌ | ✅ | ❌ NO se propaga |
| `database/seeders/project-data/*.json` | ❌ | ✅ | ❌ NO se propaga |
| `public/cd-project/img/` | ❌ | ✅ | ❌ NO se propaga |
| `resources/views/layout/front/*/{demo}.blade.php` | ⚠️ | ⚠️ | Depende (mejoras sí) |
| `resources/views/modules/*/frontend/demos/{demo}/` | ❌ | ✅ | ❌ NO se propaga |

---

## 📝 Convenciones de Nombres

### Demos

**Formato**: `demo-{category}-{number}`

**Ejemplos**:
- `demo-law-firm-2`
- `demo-construction`
- `demo-accounting-1`
- `demo-creative-agency-2`

### Skins

**Formato**: `skin-{category}-{number}`

**Ejemplos**:
- `skin-law-firm-2`
- `skin-construction`
- `skin-accounting-1`

**Mapeo**: Se mapea automáticamente desde demo mediante `get_demo_skin_mapping()`

### Módulos

**Formato**: Nombre en minúsculas, singular

**Ejemplos**:
- `blog`
- `services`
- `team`
- `references`

### Archivos JSON de Datos

**Formato**: `{module}.json`

**Ejemplos**:
- `services.json`
- `blog.json`
- `team.json`
- `references.json`

**Ubicación**: `database/seeders/project-data/`

### Assets

**Estructura**:
```
public/cd-project/img/
├── logos/              # Logos del proyecto
├── favicon/            # Favicons
└── demos/
    └── {demo}/         # Assets específicos del demo
        ├── slides/      # Imágenes de carousel
        ├── team/        # Fotos del equipo
        ├── icons/       # Iconos
        └── ...
```

### Vistas

**Estructura**:
```
resources/views/
├── layout/front/
│   ├── headers/
│   │   ├── {demo}.blade.php
│   │   └── default.blade.php
│   └── footers/
│       ├── {demo}.blade.php
│       └── default.blade.php
└── modules/
    └── {module}/
        └── frontend/
            ├── index.blade.php        # Vista genérica
            ├── show.blade.php         # Vista genérica
            └── demos/
                └── {demo}/
                    └── welcome.blade.php  # Vista específica
```

---

## 🔍 Identificación de Archivos

### ¿Es Core o Proyecto?

**Preguntas clave**:

1. **¿Funciona para múltiples proyectos?** → Core
2. **¿Contiene datos específicos del proyecto?** → Proyecto
3. **¿Es configuración específica?** → Proyecto
4. **¿Es código reutilizable?** → Core

### Ejemplos

#### Core
- ✅ `app/Core/Adapters/Theme.php` - Funciona para todos los proyectos
- ✅ `app/helpers.php` - Helpers globales
- ✅ `app/Modules/Blog/` - Código del módulo blog
- ✅ `config/cd-system.php` (versión base) - Configuración neutral

#### Proyecto
- ❌ `config/cd-system.php` (versión proyecto) - Demo y módulos específicos
- ❌ `database/seeders/project-data/services.json` - Datos específicos
- ❌ `public/cd-project/img/logos/logo.png` - Logo del proyecto
- ❌ `resources/views/modules/cd-base/frontend/demos/demo-law-firm-2/welcome.blade.php` - Vista específica

---

## 📚 Referencias

- [Sistema Base](./01-sistema-base.md)
- [Adaptación a Proyectos](./02-adaptacion-proyecto.md)
- [Producto Law Firm 2](./03-producto-law-firm-2.md)
- [Configuraciones](./04-configuraciones.md)
- [Explicación Config Protegido](../../EXPLICACION-CONFIG-PROTEGIDO.md)

---

**Última actualización**: 2025-01-XX  
**Versión del documento**: 1.0.0

