Bug: el script previo solo respaldaba la BD donna. /etc/donna/donna.env,
/etc/caddy/Caddyfile y los systemd units quedaban sin respaldo. Además,
si mariadb-dump fallaba a media corrida el .sql.gz parcial quedaba
como si fuera válido (se vio hoy con un archivo de 20 bytes).
Cambios:
- Output ahora es un solo tar.gz con DB + GRANTs + configs + MANIFEST
(sha256 de cada archivo incluido)
- Atómico: tar se escribe a .tmp y se renombra solo al final
- Incluye SHOW GRANTS para poder recrear el usuario donna_app en un
server nuevo sin tener que conocer el password de root del MariaDB
- Limpieza de archivos .sql.gz legacy también en la retención
- README documenta el procedimiento de restore en server nuevo
- 5 apps live (escrituras, tramites, calendario, horas, admin)
con descripción de cada una
- 4 roles (admin, socio, abogado, usuario) y matriz de permisos
- Patrón Bootstrap::inject + window.DONNA
- AuditLog y canView() documentados
- FK user_id en hours/obs
- Módulo compartido DonnaExport (Excel + PDF) con API JS
- Eventos de hoy en home
- 14 migraciones SQL listadas en orden
- Setup en server nuevo con aplicación batch de migraciones
- Guía "agregar una app nueva" actualizada
Setup completo del portal interno donna.aal-law.com:
* Landing público con OAuth login + grid de apps autenticado
* Flujo OAuth2 contra Mailcow (mail.aal-law.com)
* Sesiones SSO compartidas en el dominio (cookie donna_session, 8h)
* Whitelist de dominios aal-law.com / aalnlaw.com
* App "Control de Escrituras" migrada desde ZH-Consultores/control-escrituras
(mismo schema, mismo frontend, ahora con shared Auth/Db/Config libs)
* Migraciones SQL para users, escrituras_tramites, escrituras_historial
* Caddy on :80 con rewrite extless → .php
* Backup diario MariaDB (systemd timer + script) con retención 14d
* Documentación de arquitectura en README + infra files en docs/infra