# Arquitectura Completa: Todo desde DB

## 🎯 Principio Fundamental

**TODO debe estar en la DB, NADA en archivos por proyecto.**

El sistema es el mismo para miles de proyectos y cambia según la DB con la que se esté corriendo.

## ✅ Componentes Implementados

### 1. SiteConfigService + SiteConfigServiceProvider
**Datos del sitio:**
- Name, tagline, URL, author, description
- Contact (phone, email, address, hours)
- Social media (facebook, instagram, linkedin, etc.)
- Footer navigation
- SEO (keywords, description, schema)
- OG (title, description, image)
- Twitter (title, description, image)
- Assets (rutas que se resuelven a URLs de Cloudinary)
- Development settings

**Ubicación en DB:** `settings` con prefijo `site.*`

### 2. CdSystemConfigService + CdSystemConfigServiceProvider
**Configuración del sistema:**
- Theme (demo, skin)
- Modules (active, navigation)
- Maintenance (enabled, allowed_ips)

**Ubicación en DB:** `settings` con prefijo `cd-system.*`

### 3. ProjectAssetService
**Assets en Cloudinary:**
- Estructura: `{project-name}/assets/{asset-name}`
- URLs guardadas en tabla `assets` (public_id, secure_url)
- Resueltas automáticamente por `SiteDataSeeder`

**Ubicación:**
- Metadata en tabla `assets`
- URLs en tabla `settings` (resueltas desde `assets`)

### 4. AnalyticsSeeder
**Analytics:**
- Google Analytics ID
- Google Tag Manager ID
- Facebook Pixel ID

**Ubicación en DB:** `settings` con prefijo `site.analytics.*`

## 🔄 Flujo Completo

### Setup Inicial de Proyecto

1. **Preparar JSONs** (solo una vez, como templates):
   - `cd-system.json` - Demo, skin, módulos
   - `site-data.json` - Datos del sitio
   - `analytics.json` - IDs de analytics
   - `assets.json` - Metadata de assets

2. **Colocar assets físicos** en `public/cd-project/assets/`

3. **Ejecutar seeders** (una vez por proyecto):
   ```bash
   php artisan migrate
   php artisan db:seed --class=Project_Seeder
   ```

4. **Resultado:**
   - Todo guardado en DB (tabla `settings` y `assets`)
   - Assets subidos a Cloudinary
   - Sistema listo

### Cambio de Proyecto

1. **Cambiar DB en .env:**
   ```env
   DB_DATABASE=bewpro-otro-proyecto
   ```

2. **Limpiar cache:**
   ```bash
   php artisan config:clear
   php artisan cache:clear
   ```

3. **Resultado automático:**
   - ✅ Demo/skin cambian desde DB
   - ✅ Módulos activos cambian desde DB
   - ✅ Assets cambian a URLs de Cloudinary del proyecto
   - ✅ Site data cambia desde DB
   - ✅ Todo sin ejecutar seeders

## 📋 Estructura en DB

### Tabla `settings`

```
settings
├── site.name => "Muma"
├── site.tagline => "Food that fits anywhere"
├── site.contact.email => "info@muma.com"
├── site.social_media.facebook.url => "https://..."
├── site.assets.main_logo => "https://res.cloudinary.com/.../logo.png"
├── cd-system.theme.demo => "demo-restaurant"
├── cd-system.theme.skin => "auto"
├── cd-system.modules.blog.active => "1"
└── ...
```

### Tabla `assets`

```
assets
├── logo.png => public_id: "muma/assets/logo", secure_url: "https://..."
├── favicon.ico => public_id: "muma/assets/favicon", secure_url: "https://..."
└── ...
```

## 🎯 Ventajas

1. **Escalable**: Miles de proyectos sin problemas
2. **Automático**: Cambio solo con cambiar DB
3. **Sin archivos por proyecto**: Todo en DB
4. **Propagable**: Actualizaciones del código sin afectar datos
5. **Aislado**: Cada proyecto con su propia DB

## 📝 Notas Importantes

- **NO crear carpetas por proyecto** para JSONs
- **NO modificar archivos de configuración** directamente
- **Todo se guarda en DB** mediante seeders
- **Todo se carga desde DB** mediante ServiceProviders
- **Los JSONs son solo templates** para poblar la DB inicialmente
