# Acceso Público a Emprendimientos

Este documento detalla la implementación realizada para permitir el acceso público (sin autenticación) a la visualización de Emprendimientos en la plataforma, manteniendo la seguridad para las operaciones de edición y creación.

## 1. Backend (Laravel API)

El objetivo en el backend fue separar las rutas de lectura de las de escritura para permitir que usuarios anónimos consuman la información de los emprendimientos.

### A. Rutas API (`routes/api.php`)

Se modificó el archivo de rutas para sacar los endpoints `index` y `show` del grupo de middleware `auth:sanctum`.

* **Rutas Públicas (Sin Token):**
  * `GET /api/emprendimientos`: Lista todos los emprendimientos (paginados).
  * `GET /api/emprendimientos/{id}`: Muestra el detalle completo de un emprendimiento, incluyendo imágenes, archivos y videos.

* **Rutas Protegidas (Requieren Login):**
  * `POST /api/emprendimientos`: Crear nuevo.
  * `PUT /api/emprendimientos/{id}`: Actualizar existente.
  * `DELETE /api/emprendimientos/{id}`: Eliminar.
  * Rutas de subida de archivos (imágenes, videos, documentos).

### B. Controlador (`EmprendimientoController.php`)

Se agregó funcionalidad de filtrado en el método `index` para facilitar la integración con el frontend público.

* **Filtro `publicado_web`**:
    Se permite pasar el parámetro `?publicado_web=true` (o `1`) en la URL para obtener **solo** los emprendimientos que tienen el flag `publicado_web` en `true`. Esto evita mostrar borradores o proyectos internos en la vista pública.

    ```php
    if ($request->has('publicado_web')) {
        $query->where('publicado_web', filter_var($request->publicado_web, FILTER_VALIDATE_BOOLEAN));
    }
    ```

---

## 2. Frontend (Vue.js)

En el frontend, se creó una estructura de rutas paralela para las vistas públicas, utilizando un layout simplificado que no expone la interfaz de administración.

### A. Nuevo Layout (`src/layouts/PublicLayout.vue`)

Se creó un componente de diseño minimalista (`PublicLayout.vue`) que:

* No incluye la barra lateral (`Sidebar`) ni el encabezado de administración (`Header`).
* Solo renderiza el contenido principal a través de `<router-view />`.
* Centra el contenido y le da un ancho máximo para una mejor lectura.

### B. Configuración del Router (`src/router/index.js`)

1. **Definición de Ruta Pública**:
    Se agregó una nueva ruta padre `/public` que utiliza el `PublicLayout`. Dentro de ella, se reutilizó el componente existente `EmprendimientosShow.vue`.

    ```javascript
    {
      path: '/public',
      component: () => import('../layouts/PublicLayout.vue'),
      children: [
        {
           path: 'emprendimientos/:id',
           name: 'emprendimientos-show-public',
           component: () => import('../views/EmprendimientosShow.vue')
        }
      ]
    }
    ```

    * **URL Resultante**: `http://dominio.com/public/emprendimientos/{id}`

2. **Guardia de Navegación (`beforeEach`)**:
    Se actualizó la lógica de protección de rutas para permitir el acceso a cualquier URL que comience con `/public`.

    ```javascript
    router.beforeEach((to, from, next) => {
      const publicPages = ['/', '/login'];
      // Se permite el acceso si está en publicPages O si la ruta empieza con '/public'
      const authRequired = !publicPages.includes(to.path) && !to.path.startsWith('/public');
      
      // ... verificación del token ...
    })
    ```

## Flujo de Funcionamiento

1. Un usuario accede a `http://tusitio/public/emprendimientos/10`.
2. El **Router de Vue** detecta el prefijo `/public` y permite la navegación sin redirigir al Login.
3. Se carga el `PublicLayout` y dentro de él, el componente `EmprendimientosShow`.
4. El componente `EmprendimientosShow` realiza una petición `GET` a `http://tusitio/api/emprendimientos/10`.
5. El **Backend de Laravel** recibe la petición en una ruta pública y devuelve los datos del emprendimiento en formato JSON.
6. El usuario visualiza la información del emprendimiento sin haber iniciado sesión.
