Skip to content

Release 0.23.0: vistas de las apps en maya_apps (D17), Odoo en el catálogo (C1) y adjuntos (C9) - #18

Merged
GGEdu merged 8 commits into
mainfrom
release/0.23
Oct 15, 2026
Merged

GGEdu merged 8 commits into
mainfrom
release/0.23

Conversation

@GGEdu

@GGEdu GGEdu commented Oct 15, 2026

Copy link
Copy Markdown
Contributor

Publica la 0.23.0.

D17: vistas de lectura en maya_apps

  • shared-platform-laravel: comando php artisan maya:views. Aplica en una transacción las vistas comunes (11) y las propias de la app (database/views/*.sql) en el esquema maya_apps de la BD de Odoo, como maya_apps_views, con GRANT SELECT a maya_fdw_reader. Tiene --dry-run.
  • shared-profile-laravel: migraciones nuevas que apuntan las tablas foráneas a maya_apps. Las asignaciones académicas se cruzan por oauth_uid; ya no leen res_users ni las tablas de maya_core tal cual.
  • maya-common 0.3.0: Job views (hook post-install,pre-upgrade, antes de migrate) con su NetworkPolicy. Se activa con views.enabled y exige MAYA_APPS_VIEWS_PASSWORD en vault.keys. Con views.enabled=false el render es igual que en 0.2.2.

Mensajería

  • C1: Odoo como servicio del catálogo (topology.yaml). Usuario odoo en /maya, que solo puede publicar en maya.audit, maya.logs y maya.notifications.
  • C9: adjuntos por referencia en metadata.attachments[] (§ 5.1 de ESTANDAR.md). No cambia x-maya-schema-version.

Pruebas

  • Tests de shared-platform (52), shared-profile (29), shared-auth (75) y shared-http (70) en verde.
  • charts/maya-common/tests/views.sh (helm template y kubeconform) y helm lint, sin errores.
  • Las 13 vistas, validadas contra el Odoo de desarrollo dentro de una transacción con ROLLBACK.

GGEdu added 8 commits October 15, 2026 07:11
Las apps leen Odoo solo por vistas del esquema maya_apps de maya_erp, que crea
el despliegue de cada app. php artisan maya:views aplica en una transacción las
vistas comunes de este paquete (database/views) y las de la app
(database/views/*.sql): CREATE OR REPLACE VIEW, COMMENT con dueño y revisión y
GRANT SELECT a maya_fdw_reader, como maya_apps_views (conexión maya_apps:
host y BD de FDW_ODOO_*, contraseña MAYA_APPS_VIEWS_PASSWORD).

- Un fichero = una sentencia CREATE OR REPLACE VIEW maya_apps.<fichero>, con
  las tablas calificadas (search_path = pg_catalog) y revisión opcional; se
  valida antes de conectar (--dry-run muestra el SQL).
- Una app con un maya_platform más viejo no pisa una vista común con una
  revisión mayor; una app no redefine las vistas de otra ni las comunes.
- Vistas comunes sobre el Odoo 19 de producción (maya_core 945144d), con el
  usuario por res_users.oauth_uid (D26 R4): v_app_users, v_dms_teams (owner_id
  = oauth_uid), v_dms_team_members, v_app_user_study_types, v_app_user_studies,
  v_app_user_course_modules y, en lugar de las tablas de Odoo que se leían tal
  cual, v_app_study_types, v_app_studies, v_app_subjects,
  v_app_study_subjects y v_app_languages. Probadas el 15-10 contra el maya_erp
  de desarrollo en una transacción deshecha: compilan con los permisos de
  maya_apps_views y maya_fdw_reader las lee; mismas filas que las vistas de
  maya_infra y que las vistas locales de shared-profile.
- README: diseño, contrato, revisiones y qué hacer antes de actualizar módulos
  de Odoo (borrar las vistas de maya_apps y volver a desplegar).
…_apps (D17)

maya_fdw_reader ya no lee tablas de Odoo, solo el esquema maya_apps. Migraciones
nuevas (las ya ejecutadas no se tocan), no-op en testing:

- users, teams, academic-catalogs, languages: ALTER FOREIGN TABLE … OPTIONS
  (SET schema_name maya_apps, SET table_name …) hacia v_app_users,
  v_dms_teams, v_dms_team_members, v_app_study_types, v_app_studies,
  v_app_subjects, v_app_study_subjects y v_app_languages, con las mismas
  columnas: las vistas locales no cambian.
- academic-assignments: user_study_types, user_studies y user_course_modules
  pasan a leer v_app_user_* (ya resueltas por oauth_uid en Odoo) por tablas
  foráneas nuevas; fuera las cinco que leían res_users y otras tablas de Odoo
  tal cual. down() vuelve al estado de 2026_10_14_000001.

Se despliegan con el Job views de maya-common 0.3.0 (php artisan maya:views de
shared-platform-laravel). Probado el 15-10 en el maya_erp de desarrollo, en un
esquema de prueba y una transacción deshecha: la instalación desde cero de las
migraciones del dashboard deja las 14 tablas foráneas apuntando a maya_apps.
views.enabled añade un Job con la imagen worker y php artisan maya:views, hook
post-install,pre-upgrade con peso -10 (antes que migrate en cada fase; no
pre-install por lo mismo que migrate en 0.2.1: la ServiceAccount del Vault
Agent no existe aún en el primer install), y su NetworkPolicy, también hook y
antes que él (en un pre-upgrade todavía manda la NetworkPolicy anterior), hacia
views.networkPolicy.cidrs o, si está vacío, networkPolicy.egress.cidrs.

views.passwordKey (MAYA_APPS_VIEWS_PASSWORD) tiene que estar en vault.keys y
solo la recibe el Job views: los demás pods se renderizan sin ella. El Job no
monta el PVC de ficheros. Contrato de values nuevo (views.*): 0.3.0.

tests/views.sh (fuera del paquete) lo prueba con helm template y kubeconform;
con views.enabled=false el render es el mismo que el de 0.2.2.
Campo opcional de las notificaciones (§ 5.1 del estándar): source, model, id, name, mimetype,
size y sha256. El fichero no viaja en el mensaje; solo actúa en el canal email: n8n lo descarga de
Odoo con su usuario de servicio («Odoo adjuntos», POST /json/2/ir.attachment/read), comprueba el
sha256 y lo adjunta; si falla, el mensaje va a dlq.notifications.email. Límites: 10 adjuntos y
15 MiB. Compatible: x-maya-schema-version sigue en 1.
odoo: kind service, publishes [maya.audit, maya.logs, maya.notifications], sin colas. El
generador da el usuario odoo en /maya con configure=^$, write=^(maya\.audit|maya\.logs|maya\.notifications)$
y read=^$, y su contraseña en RABBITMQ_PASSWORD_ODOO. Lo necesita el publicador de maya_core (C7).
@GGEdu
GGEdu merged commit c9fb1ce into main Oct 15, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant