# 🔄 Guía de Migración a CIMA API + Redis

Esta guía te ayudará a migrar tu aplicación FarmaFinder existente para usar la API de CIMA con caché de Redis.

## 📋 Cambios Principales

### Backend
- ✅ Los medicamentos ahora se obtienen de la API de CIMA en tiempo real
- ✅ Redis se usa como caché para mejorar el rendimiento
- ✅ La tabla `pharmacy_medicines` ahora usa `medicine_nregistro` en lugar de `medicine_id`
- ✅ Se eliminó la necesidad de gestionar medicamentos localmente

### Frontend
- ✅ El componente de búsqueda ahora consulta CIMA en tiempo real
- ✅ El panel de administración permite buscar medicamentos de CIMA
- ✅ Interfaz mejorada para vincular medicamentos a farmacias

## 🚀 Pasos para Migrar

### 1. Instalar Redis

**Ubuntu/Debian:**
```bash
sudo apt-get update
sudo apt-get install redis-server
sudo systemctl start redis-server
sudo systemctl status redis-server
```

**macOS:**
```bash
brew install redis
brew services start redis
```

**Verificar instalación:**
```bash
redis-cli ping
# Debe responder: PONG
```

### 2. Actualizar Dependencias

```bash
cd backend
npm install
```

Esto instalará las nuevas dependencias:
- `redis` - Cliente de Redis para Node.js
- `axios` - Cliente HTTP para consumir la API de CIMA

### 3. Ejecutar la Migración de la Base de Datos

```bash
cd backend
npm run migrate
```

Este script:
- ✅ Actualiza la tabla `pharmacy_medicines` para usar `medicine_nregistro`
- ✅ Mantiene las farmacias existentes
- ⚠️ Las relaciones medicamento-farmacia antiguas se perderán (deberás re-vincularlas)

### 4. Verificar Configuración

Crear archivo `.env` en `backend/` (opcional):

```env
# Redis Configuration
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASSWORD=

# Session Configuration
SESSION_SECRET=cambia-esto-en-produccion

# Server Configuration
PORT=3001
```

### 5. Iniciar la Aplicación

**Terminal 1 - Redis:**
```bash
redis-server
```

**Terminal 2 - Backend:**
```bash
cd backend
npm start
```

**Terminal 3 - Frontend:**
```bash
cd frontend
npm run dev
```

### 6. Verificar el Funcionamiento

1. Abre `http://localhost:3000`
2. Busca un medicamento (ej: "paracetamol")
3. Verifica que aparezcan resultados de CIMA
4. En los logs del backend deberías ver:
   ```
   ✅ Connected to Redis
   🌐 Fetching from CIMA API: paracetamol
   ✅ Cached X medicines for: paracetamol
   ```

### 7. Re-vincular Medicamentos a Farmacias

Como las relaciones antiguas se perdieron:

1. Ve al Panel de Administración
2. Selecciona la pestaña "Link Medicine"
3. Busca medicamentos desde CIMA
4. Vincúlalos a tus farmacias con precio y stock

## 🔍 Verificación de Logs

### Backend debe mostrar:
```
✅ Connected to Redis
Database initialized successfully
Server running on http://localhost:3001
```

### Al buscar medicamentos:
```
🌐 Fetching from CIMA API: paracetamol
✅ Cached 204 medicines for: paracetamol
```

### En búsquedas posteriores:
```
📦 Cache hit for: paracetamol
```

## ⚠️ Posibles Problemas

### Redis no conecta
**Error:** `Redis Client Error: connect ECONNREFUSED`

**Solución:**
```bash
# Verificar si Redis está corriendo
ps aux | grep redis

# Iniciar Redis
redis-server

# O con systemd
sudo systemctl start redis-server
```

### API de CIMA lenta o no responde
**Error:** Búsquedas muy lentas o timeout

**Solución:**
- La API de CIMA puede estar experimentando problemas
- Los resultados cacheados seguirán funcionando
- Espera unos minutos e intenta de nuevo

### Error de migración
**Error:** `table pharmacy_medicines already exists`

**Solución:**
```bash
# Hacer backup de la base de datos
cp backend/database.sqlite backend/database.sqlite.backup

# Eliminar la base de datos y recrear
cd backend
rm database.sqlite
npm run seed
npm run create-admin
```

## 📊 Comparación Antes/Después

### Antes
- ❌ Medicamentos almacenados localmente en SQLite
- ❌ Necesidad de actualizar la base de datos manualmente
- ❌ Datos posiblemente desactualizados
- ✅ Respuestas rápidas (todo local)

### Después
- ✅ Medicamentos siempre actualizados desde CIMA
- ✅ Datos oficiales de la Agencia Española de Medicamentos
- ✅ Sin necesidad de mantenimiento de medicamentos
- ✅ Respuestas rápidas gracias a Redis cache
- ✅ Fallback a cache si la API falla

## 🎉 ¡Migración Completada!

Si todo funciona correctamente:
- ✅ Redis está conectado
- ✅ Las búsquedas devuelven medicamentos de CIMA
- ✅ El cache funciona (segunda búsqueda es más rápida)
- ✅ Puedes vincular medicamentos a farmacias

## 📚 Recursos Adicionales

- [API de CIMA](https://cima.aemps.es/)
- [Documentación de Redis](https://redis.io/documentation)
- [README principal](./README.md)

## 💬 Soporte

Si encuentras problemas durante la migración, verifica:
1. Los logs del backend
2. El estado de Redis: `redis-cli ping`
3. La conectividad a internet (necesaria para CIMA API)
