# Despliegue en Hosting

Esta guia prepara CartaGo para servir la API desde `https://tucarta.driatechinnovation.com`.

## 1. Preparar el hosting

- Apunta el subdominio `tucarta.driatechinnovation.com` al directorio `public` del proyecto.
- Activa un certificado SSL valido para el subdominio.
- Usa PHP 8.3 o superior con las extensiones `ctype`, `curl`, `dom`, `fileinfo`, `mbstring`, `openssl`, `pdo_mysql`, `tokenizer` y `xml`.
- Verifica que `storage` y `bootstrap/cache` tengan permisos de escritura para el usuario del servidor web.

No expongas la raiz del repositorio como document root: solo `public` debe ser accesible desde internet.

## 2. Configurar el entorno

1. Copia `deployment/.env.production.example` como `.env` en el servidor.
2. Completa `DB_DATABASE`, `DB_USERNAME`, `DB_PASSWORD` y las credenciales de Mercado Pago.
3. Genera una clave unica para produccion:

```bash
php artisan key:generate --force
```

Si el frontend vive en otro dominio, actualiza estos valores separados por comas:

```dotenv
FRONTEND_URL=https://tu-frontend.example.com
CORS_ALLOWED_ORIGINS=https://tu-frontend.example.com,https://tucarta.driatechinnovation.com
SANCTUM_STATEFUL_DOMAINS=tu-frontend.example.com,tucarta.driatechinnovation.com
```

La API actual usa tokens Bearer de Sanctum. Mantener estos dominios configurados permite usar tambien cookies si el frontend las requiere.

## 3. Base de datos

En phpMyAdmin selecciona primero la base creada por tu proveedor, por ejemplo `driatech_tucarta`, e importa [bd.sql](bd.sql). El archivo no crea ni cambia de base: crea las tablas en orden de dependencia y ejecuta las inserciones al final.

Coloca ese mismo nombre en `DB_DATABASE` dentro del `.env` del servidor.

Como alternativa, en una base vacia puedes crear la estructura con:

```bash
php artisan migrate --force
```

## 4. Publicar la aplicacion

Ejecuta en la raiz del proyecto:

```bash
composer install --no-dev --optimize-autoloader
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache
```

Activa OPcache desde el panel PHP del hosting. La API cachea el menu publico, devuelve `ETag` para respuestas `304` y usa cache de archivos para evitar consultas repetidas a MySQL.

Las nuevas imagenes se guardan directamente en `public/uploads` y se sirven desde `/uploads/...`, por lo que no dependen de `storage:link`.
Sube tambien el contenido de `public/uploads` al servidor; esos archivos no se incluyen en Git y el dump contiene referencias a las imagenes existentes.

## 5. Tareas programadas

Configura un cron cada minuto:

```cron
* * * * * cd /ruta/absoluta/al/proyecto && php artisan schedule:run >> /dev/null 2>&1
```

El scheduler ejecuta diariamente `subscriptions:expire`. Si el hosting no permite procesos persistentes, usa `QUEUE_CONNECTION=sync`; si permite workers, conserva `database` y ejecuta un worker supervisado.

## 6. Verificacion final

Comprueba estas URLs una vez publicado:

- `https://tucarta.driatechinnovation.com/up`
- `https://tucarta.driatechinnovation.com/api/public/menus/{slug}`
- `https://tucarta.driatechinnovation.com/uploads/...` para una imagen cargada

Configura en Mercado Pago el webhook:

```text
https://tucarta.driatechinnovation.com/api/webhooks/mercadopago
```

No subas el archivo `.env`, claves de Mercado Pago, dumps con datos reales de clientes ni archivos de `storage` a un repositorio publico.
