> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rocky.global/llms.txt
> Use this file to discover all available pages before exploring further.

# DEPLOY CURACAO CITIES

# Guía para Agregar Ciudades de Curaçao en Producción

Esta guía explica cómo agregar todas las ciudades de Curaçao de forma segura en el entorno de producción.

## ✅ Características de Seguridad

El comando `cities:add-curacao` está diseñado para ser **100% seguro en producción**:

* ✅ **No elimina datos**: Solo agrega ciudades, nunca borra ni modifica datos existentes
* ✅ **Idempotente**: Puede ejecutarse múltiples veces sin problemas
* ✅ **Transaccional**: Usa transacciones de base de datos (si hay error, se revierte todo)
* ✅ **Verifica duplicados**: Comprueba si las ciudades ya existen antes de agregarlas
* ✅ **Modo dry-run**: Permite ver qué se agregaría sin hacer cambios reales

## 📋 Pre-requisitos

1. Asegúrate de que el país Curaçao existe en la tabla `countries`
   * Código ISO2: `CW`
   * Si no existe, ejecuta primero: `php artisan db:seed --class=CountriesSeeder`

2. Haz una copia de seguridad de la base de datos (recomendado pero no crítico, ya que solo agregamos datos):
   ```bash theme={null}
   # Ejemplo con MySQL
   mysqldump -u usuario -p nombre_bd > backup_antes_curacao_$(date +%Y%m%d_%H%M%S).sql
   ```

## 🚀 Proceso de Despliegue

### Paso 1: Modo Dry-Run (Recomendado)

Primero, ejecuta el comando en modo dry-run para ver qué ciudades se agregarían:

```bash theme={null}
php artisan cities:add-curacao --dry-run
```

Esto mostrará:

* Qué país se encontró
* Cuántas ciudades ya existen
* Qué ciudades se agregarían
* **NO realizará ningún cambio en la base de datos**

### Paso 2: Ejecutar en Producción

Si el dry-run se ve bien, ejecuta el comando sin el flag `--dry-run`:

```bash theme={null}
php artisan cities:add-curacao
```

El comando:

1. Buscará el país Curaçao (CW)
2. Verificará qué ciudades ya existen
3. Mostrará las ciudades que se agregarán
4. Pedirá confirmación antes de proceder
5. Agregará solo las ciudades que no existen
6. Mostrará un resumen de lo agregado

### Paso 3: Verificación

Verifica que las ciudades se agregaron correctamente:

```bash theme={null}
# Ver todas las ciudades de Curaçao en la base de datos
php artisan tinker
>>> App\Models\Cities::where('country_code', 'CW')->pluck('name')
```

O verifica en el checkout:

1. Ve a cualquier formulario de checkout
2. Selecciona el país "Curaçao"
3. Verifica que aparezcan las ciudades (Willemstad, Bandariba, etc.)

## 📊 Ciudades que se Agregan

El comando agrega las siguientes 24 ciudades principales de Curaçao:

1. Willemstad (Capital)
2. Bandariba
3. Bandabou
4. Sint Michiel
5. St. Michiel
6. Santa Rosa
7. Sint Michiel Liber
8. Brievengat
9. Barber
10. Dorp Soto
11. Otrabanda
12. Sabana Westpunt
13. Westpunt
14. Lagun
15. Tera Kora
16. Nieuwpoort
17. Playa Kanoa
18. Playa Kalki
19. Boca San Pedro
20. Rincon
21. Dorp Sint Willebrordus
22. Groot Sint Joris
23. Sint Joris
24. Klein Sint Joris

## 🔄 Ejecutar Múltiples Veces

El comando es completamente seguro para ejecutarse múltiples veces. Si una ciudad ya existe, simplemente la saltará y continuará con las demás.

## ⚠️ Troubleshooting

### Error: "Curaçao (CW) not found in countries table"

**Solución**: Ejecuta primero el seeder de países:

```bash theme={null}
php artisan db:seed --class=CountriesSeeder
```

### Error de permisos de base de datos

**Solución**: Verifica que el usuario de la base de datos tenga permisos de INSERT en la tabla `cities`.

### Las ciudades no aparecen en el checkout

**Solución**:

1. Verifica que el endpoint `/api/get-states?country=CW` devuelva las ciudades
2. Limpia la caché si es necesario: `php artisan cache:clear`
3. Verifica que el código JavaScript esté cargando las ciudades correctamente

## 📝 Notas Adicionales

* El CSV `cities_202505192231.csv` ya ha sido actualizado con estas ciudades
* Si ejecutas el seeder completo de ciudades (`CitiesSeeder`), estas ciudades también se incluirán
* El comando usa transacciones, por lo que si hay algún error, todos los cambios se revierten automáticamente

## 🔗 Archivos Relacionados

* Comando: `app/Console/Commands/AddWillemstadCity.php`
* CSV: `cities_202505192231.csv`
* Modelo: `app/Models/Cities.php`
* Endpoint API: `routes/web.php` (línea 44: `/api/get-states`)
