Plan de migración — media y social fuera de Enroll¶
Estado: plan escrito, no ejecutado. Es el requisito que el goal pone a la fase 5: no se toca sin un plan verificable, porque aquí hay tablas con datos y rutas que ya usan otros plugins.
1. Lo que hay, medido¶
Dentro de convoca-enroll viven dos subsistemas completos:
| Subsistema | Código | Tablas | Rutas REST |
|---|---|---|---|
media/ |
4.477 líneas en 11 clases (+ media/poster/) |
convoca_media_logs, convoca_media_templates |
/media/templates, /media/templates/<id>, /media/poster/render, /media/poster/regenerate, /media/blog/create |
social/ |
5 clases | convoca_social_accounts, convoca_social_queue |
/social/accounts, /social/accounts/<id>, /social/auth/google, /social/auth/meta, /social/callback/google |
Comparten instalador y actualizador (class-media-installer.php, class-media-upgrade-manager.php),
osea que hoy no se pueden mover por separado sin llevarse el ciclo de vida.
2. Por qué no es una limpieza¶
- Datos propios. Cuatro tablas con histórico (logs de generación, plantillas, cuentas OAuth, cola de publicación). Moverlas de plugin exige decidir quién es el dueño y no renombrarlas: el nombre de tabla es el contrato con los datos ya guardados.
- Rutas públicas. Cinco rutas de media y cinco de social bajo un namespace que hoy es de Enroll. Cambiar el namespace rompe a cualquier consumidor; se mantienen y se declaran compatibles.
- Ciclo de vida. Instalación,
dbDeltay upgrades viven en Enroll. Separar el plugin obliga a mover también las versiones de esquema y a que el nuevo plugin ejecute sus upgrades sin depender de que Enroll esté activo. - Dependencias de vuelta. Media usa capacidades y utilidades de Enroll; social usa los CPT de actividades. Hay que invertir esas dependencias por contratos de Core antes de separar.
3. Destino propuesto¶
Dos plugins nuevos, convoca-media y convoca-social, ambos con Requires Plugins: convoca-core.
No se separan el uno del otro en el mismo paso.
Orden de dependencias: Core → Media → Social (social publica lo que media genera).
4. Pasos, cada uno verificable¶
- Contratos primero, sin mover nada. Extraer a Core lo que media y social necesitan de Enroll
(capacidades, utilidades, acceso a actividades) y dejar pruebas de que Enroll sigue igual.
Verificación: inventario
--checken verde y batería de Enroll intacta. - Plugin vacío que se activa solo.
convoca-mediacon su cabecera, suRequires Pluginsy su instalador propio que no crea tablas todavía (las tablas siguen siendo de Enroll). Verificación: se activa y desactiva sin fatales, con Enroll activo y sin él. - Mover código, no datos. Las clases pasan al plugin nuevo; las tablas no se tocan. Las rutas
conservan el namespace actual. Enroll deja de cargar
media/cuandoconvoca-mediaestá activo (guardaclass_exists, una sola vez). Verificación: captura de las pantallas de media antes/después + rutas idénticas (el mismo arnés decapturar-rutasque ya se usó en Members). - Traspaso del esquema. El instalador de
convoca-mediapasa a ser el dueño dedbDeltacon la misma definición; Enroll deja de ejecutarla. Ninguna tabla se renombra ni se copia. Verificación: compararSHOW CREATE TABLEde las cuatro tablas antes y después: idéntico. Y una prueba de que una instalación limpia crea las tablas. - Retirada de la copia vieja, solo después de un ciclo completo con el plugin nuevo activo.
Verificación: desactivar
convoca-mediano debe romper Enroll; reactivarlo recupera todo. - Social, repitiendo 2-5 con el mismo orden.
5. Rollback¶
En cada paso: paquete anterior guardado, copia de las cuatro tablas antes del paso 4 y el paso 3 reversible con un commit. Si el paso 4 falla, se restaura el instalador de Enroll y las tablas no se habrán tocado.
6. Cuándo NO hacerlo¶
Si al hacer el paso 1 aparece que media y social comparten estado con el flujo de inscripciones (por ejemplo, decisiones de plazas o de evaluación), se para: sería rediseño de dominio, no una extracción. En ese caso se documenta el acoplamiento y se deja como está, que es lo que el goal manda cuando un trozo no se puede aislar.
7. Estimación honesta¶
Cuatro tablas, diez rutas, dos ciclos de vida y ~5.500 líneas: no es una tarde. Es un goal propio, con su fase de contratos y su ventana de migración. Este documento es el requisito para empezarlo, no un trabajo hecho.