Ciclo de Vida de la Invitacion
Documento tecnico que describe el ciclo de vida completo de una invitacion en Nvito, incluyendo la maquina de estados, los flujos de creacion para invitaciones internas y externas, el pipeline de publicacion, el versionamiento y los mecanismos de cierre.
| Campo | Valor |
|---|---|
| Version | 1.0 |
| Fecha | Marzo 2026 |
| Estado | Publicado |
| Audiencia | Equipo de desarrollo, arquitectos |
1. Maquina de Estados
Cada invitacion en Nvito sigue un ciclo de vida de 4 estados. Las transiciones estan controladas por ApprovalWorkflowService, que valida las precondiciones de cada cambio de estado.
1.1 Diagrama de Estados
1.2 Transiciones
| Transicion | De | A | Actor | Validaciones |
|---|---|---|---|---|
| Crear | [*] | IN_CONSTRUCTION | Usuario | Max 3 invitaciones por evento, auto-genera slug |
| Submit | IN_CONSTRUCTION | UNPUBLISHED | Usuario | Secciones requeridas presentes (solo internas) |
| Approve | UNPUBLISHED | PUBLISHED | Usuario | Genera HTML (internas) o verifica htmlUrl (externas) |
| Reject | UNPUBLISHED | IN_CONSTRUCTION | Usuario | Requiere razon de rechazo |
| Unpublish | PUBLISHED | UNPUBLISHED | Usuario | Webhook de despublicacion |
| Close | PUBLISHED | CLOSED | Usuario o Sistema | Registra closeReason y closedBy |
| Reopen | CLOSED | PUBLISHED | Usuario | Evento debe estar ACTIVE, fecha vigente |
2. Tipos de Invitacion (InvitationSource)
Nvito soporta dos origenes de invitacion, discriminados por el enum InvitationSource:
2.1 Invitacion Interna (INTERNAL)
Creada con el motor de templates, IA conversacional y editor visual de Nvito.
Caracteristicas:
- Template base seleccionado del catalogo o generado por IA
- Secciones editables: Hero, RSVP, Location, Itinerary, Gallery, GiftRegistry, Accommodation, DressCode, FAQ
- Temas personalizables con paleta de colores y tipografias
- Transiciones fullpage (27 tipos: 10 clasicas + 17 cinematograficas)
- Pantallas de carga (25 tipos: 8 CSS + 17 Canvas)
- Versionamiento interno (max 50 versiones)
- Generacion HTML automatica al publicar
2.2 Invitacion Externa (EXTERNAL)
HTML disenado fuera de Nvito, cargado manualmente.
Caracteristicas:
- Upload de archivo HTML (max 5MB)
- Validacion de seguridad en 9 pasos (
HtmlValidatorService) - Sin editor visual — re-upload completo para cambios
- Sin versionamiento (siempre version 1)
- Sin secciones ni temas de Nvito
- Publicacion directa (skip HTML generation)
2.3 Comparativa
| Aspecto | INTERNAL | EXTERNAL |
|---|---|---|
| Creacion | Template + IA + Editor | Upload HTML |
| Edicion | Visual, por secciones | Re-upload completo |
| Versiones | Si (max 50) | No |
| Secciones | Si (Hero, RSVP, etc.) | No |
| Temas | Si | No |
| Transiciones | Si (27 tipos) | No |
| Loaders | Si (25 tipos) | No |
| Publicacion | Genera HTML + CDN | Verifica htmlUrl |
| Analiticas | Si | Si |
| Preview | Si | Si |
| RSVP | Si | Si (si incluye formulario) |
3. Flujo de Creacion — Invitacion Interna
4. Flujo de Creacion — Invitacion Externa
5. Pipeline de Publicacion
El flujo de publicacion es el proceso mas critico del ciclo de vida. Transforma una invitacion aprobada en una pagina web accesible publicamente.
6. Versionamiento (Solo Internas)
Las invitaciones internas mantienen un historial de versiones que permite rollback.
| Aspecto | Detalle |
|---|---|
| Max versiones | 50 por invitacion |
| Que se versiona | Contenido de secciones, configuracion de tema, transiciones, loaders |
| Cuando se crea version | Al guardar cambios significativos (no auto-save) |
| Rollback | Restaura una version anterior como version actual |
| Impacto en publicacion | El rollback no republica — requiere nuevo ciclo de aprobacion |
7. Secciones de Invitacion (Solo Internas)
Las invitaciones internas se componen de secciones modulares:
| Seccion | Requerida | Descripcion |
|---|---|---|
| Hero | Si | Portada con nombres, fecha y mensaje principal |
| RSVP | Si | Formulario de confirmacion de asistencia |
| Location | No | Mapa y direccion del venue |
| Itinerary | No | Programa del evento con horarios |
| Gallery | No | Galeria de fotos |
| GiftRegistry | No | Mesa de regalos y fondos de efectivo |
| Accommodation | No | Opciones de hospedaje |
| DressCode | No | Codigo de vestimenta |
| FAQ | No | Preguntas frecuentes |
Orden de secciones: Configurable por el usuario via drag-and-drop. Se almacena como array ordenado visibleSections.
8. Mecanismos de Cierre
Una invitacion puede cerrarse por multiples razones:
| Mecanismo | closeReason | Actor | Descripcion |
|---|---|---|---|
| Manual | MANUAL | Usuario | El organizador cierra la invitacion explicitamente |
| Evento completado | EVENT_COMPLETED | Sistema | EventSchedulerService cierra invitaciones al completar evento |
| Evento cancelado | EVENT_CANCELLED | Sistema | Al cancelar evento, todas las invitaciones se cierran |
8.1 Reapertura
Una invitacion cerrada puede reabrirse si:
- El evento esta en estado
ACTIVE - La fecha del evento no ha pasado
- El usuario tiene rol
OWNERoADMIN
La reapertura cambia el estado de CLOSED a PUBLISHED y dispara revalidacion ISR.
9. Restricciones y Limites
| Restriccion | Valor |
|---|---|
| Max invitaciones por evento | 3 |
| Max versiones por invitacion (interna) | 50 |
| Max tamano HTML externo | 5 MB |
| Slug | Unico global, alfanumerico + guiones, max 200 chars |
| Secciones requeridas (interna) | Hero + RSVP |
10. Archivos Clave
| Archivo | Ubicacion | Responsabilidad |
|---|---|---|
invitations.service.ts | src/modules/invitations/ | CRUD de invitaciones, validaciones de negocio |
invitation-lifecycle.service.ts | src/modules/invitations/services/ | Gestion de estados y transiciones |
approval-workflow.service.ts | src/modules/invitations/services/ | Pipeline de aprobacion y publicacion |
html-generation.service.ts | src/modules/invitations/services/ | Generacion de HTML para invitaciones internas |
document-generator.service.ts | src/modules/invitations/services/ | Compilacion del documento final (HTML + CSS + JS) |
html-validator.service.ts | src/modules/invitations/services/ | Validacion de seguridad de HTML externo (9 pasos) |
external-invitation.service.ts | src/modules/invitations/services/ | Upload, re-upload y download de HTML externo |
sections.service.ts | src/modules/invitations/services/ | CRUD de secciones de invitacion |
themes.service.ts | src/modules/invitations/services/ | Configuracion de temas visuales |
11. Relacion con Otros Flujos
| Flujo relacionado | Relacion |
|---|---|
| Ciclo de Vida del Evento | La publicacion activa el evento; el cierre del evento cierra invitaciones |
| Flujo del Invitado | Los invitados interactuan con invitaciones publicadas (RSVP, visualizacion) |
| Flujo de Comunicaciones | Las campanas incluyen el link a la invitacion publicada |