# Microsoft Graph Multi-User Migration

## Cambios Realizados

Se ha modificado el `MicrosoftGraphSyncService` para cambiar de usar un único usuario de servicio definido en `.env` (`MSGRAPH_SERVICE_USER_ID`) a usar múltiples usuarios basados en el modelo `MicrosoftUser` con el campo `ms_id`.

### Principales Modificaciones

1. **Nuevo método `getMicrosoftGraphUsers()`**: 
   - Obtiene todos los usuarios de la tabla `microsoft_users` que tienen un valor en el campo `ms_id`
   - Retorna un array con todos los IDs de Microsoft Graph disponibles

2. **Nuevo método `getPrimaryMicrosoftGraphUser()`**:
   - Selecciona el usuario primario para operaciones (actualmente el primero de la lista)
   - Puede ser extendido en el futuro para usar lógica de prioridad

3. **Métodos modificados**:
   - `syncContactSubfolder()` - Creación/actualización de carpetas de contactos
   - `syncUserContact()` - Sincronización de contactos individuales
   - `syncContactsForFolder()` - Sincronización de contactos por carpeta
   - `createUserContact()` - Creación de contactos de usuario
   - `updateUserContact()` - Actualización de contactos de usuario
   - `testConnection()` - Prueba de conexión a Microsoft Graph
   - `createTestContactFolder()` - Creación de carpeta de prueba
   - `deleteTestContactFolder()` - Eliminación de carpeta de prueba
   - `deleteAllContactFolders()` - Eliminación de todas las carpetas
   - `listContactFolders()` - Listado de carpetas de contactos
   - `listContactsInFolder()` - Listado de contactos en carpeta específica
   - `listAllContacts()` - Listado de todos los contactos
   - `findFolderId()` - Búsqueda de ID de carpeta
   - `clearAllContacts()` - Limpieza de todos los contactos

### Configuración Requerida

Para que el nuevo sistema funcione, necesitas:

1. **Datos en la tabla `microsoft_users`**:
   ```sql
   -- Ejemplo de inserción
   INSERT INTO microsoft_users (title, email, ms_id) VALUES 
   ('Service User', 'service@example.com', 'uuid-del-usuario-de-microsoft');
   ```

2. **Al menos un usuario con `ms_id` válido** en la tabla `microsoft_users`

### Ventajas del Nuevo Enfoque

- **Flexibilidad**: Permite usar múltiples usuarios de Microsoft Graph
- **Escalabilidad**: Fácil agregar más usuarios sin cambiar código
- **Configuración en base de datos**: No depende de variables de entorno
- **Preparado para el futuro**: Base para implementar lógica de balanceo de carga o usuarios especializados

### Compatibilidad

- ✅ Mantiene toda la funcionalidad existente
- ✅ Mismo comportamiento para operaciones de sincronización
- ✅ Logs informativos sobre qué usuario se está usando
- ⚠️ Requiere migración de datos: mover de `.env` a base de datos

### Próximos Pasos

1. Configurar usuarios en la tabla `microsoft_users` 
2. Probar las operaciones de sincronización
3. Remover la variable `MSGRAPH_SERVICE_USER_ID` del `.env` (opcional)
4. Considerar implementar lógica de selección de usuario más sofisticada si es necesario
