Docs

Modelo de Datos

Documentacion tecnica del schema de base de datos de Nvito. Ultima actualizacion: Marzo 2026


1. Resumen del Schema

AspectoDetalle
ORMPrisma 5.22
Base de datosPostgreSQL (adaptador nativo + linux-musl-openssl)
Total de modelos51 modelos
Total de enums37 enums
ArquitecturaMulti-tenant con organizationId en la mayoria de modelos
IDsUUID v4 (@default(uuid()) @db.Uuid)
TimestampscreatedAt, updatedAt, deletedAt (soft delete)
Campos JSONsettings, preferences, config, metadata, theme, schema
Mapeo de tablasSnake_case en BD (@@map), camelCase en Prisma

Estrategia Multi-Tenant

La plataforma utiliza un modelo multi-tenant a nivel de fila (Row-Level). Cada Organization representa un tenant aislado. Los modelos principales incluyen un campo organizationId que vincula los datos a su organizacion correspondiente. Los indices compuestos sobre [organizationId, ...] garantizan consultas eficientes por tenant.

Modelos Agrupados por Dominio

DominioModelosCantidad
Core / AuthOrganization, User, UserRole, PreRegistration, EventCollaboratorInvitation5
EventosEvent, EventType, EventServiceConfig, ServicePackage, EventContract, EventAccessCode, Client7
InvitacionesInvitation, Section, InvitationVersion, InvitationApproval, Template5
Invitados / RSVPGuest, GuestGroup, GuestAccessToken, GuestMessage, RSVP, QRPass, TableAssignment, EventTable8
ComunicacionesNotification, CommunicationCampaign, CommunicationMessage3
Media / MusicaMedia, Music, AudioGuestbook, BackgroundMusic, BackgroundMusicTrack5
FeaturesLocation, ItineraryItem, GiftRegistry, GiftRegistryItem, GiftBankAccount, Accommodation, AccommodationHotel, AccommodationTransportOption, CustomDomain9
AnalyticsInvitationAnalyticsEvent, InvitationAnalyticsSummary2
IAAIGeneration, AIUsage, AIQuota3
PagosPayment, PaymentLink2
MovilMobileSession1
AuditoriaAuditLog1

2. Diagrama ER - Entidades Core

Relaciones fundamentales entre Organization, User, Event e Invitation.


3. Diagrama ER - Entidades de Invitaciones

El modulo de invitaciones digitales con versionamiento, aprobaciones, secciones, templates y analytics.


4. Diagrama ER - Entidades de Comunicaciones

Sistema de notificaciones individuales y campanas de comunicacion masiva.


5. Diagrama ER - Entidades de Features

Funcionalidades adicionales: ubicaciones, itinerario, QR passes, mesa de regalos, hospedaje, media, mesas y mas.


6. Enums Principales

6.1 Estado del Evento - EventStatus

ValorDescripcion
DRAFTEvento en borrador, aun no publicado
ACTIVEEvento activo y visible para invitados
CANCELLEDEvento cancelado (requiere razon de cancelacion)
COMPLETEDEvento finalizado

6.2 Estado de la Invitacion - InvitationStatus

ValorDescripcion
IN_CONSTRUCTIONInvitacion en proceso de diseno/construccion
UNPUBLISHEDInvitacion lista pero no publicada
PUBLISHEDInvitacion publicada y accesible por URL
CLOSEDInvitacion cerrada (ya no acepta RSVPs)

6.3 Origen de la Invitacion - InvitationSource

ValorDescripcion
INTERNALInvitacion creada con el motor de templates y IA de Nvito (default)
EXTERNALHTML disenado fuera de Nvito y cargado manualmente

6.4 Estado del RSVP - RSVPStatus

ValorDescripcion
PENDINGConfirmacion pendiente de respuesta
CONFIRMEDInvitado confirmo asistencia
DECLINEDInvitado declino la invitacion
MAYBEInvitado aun no esta seguro

6.5 Estado del Invitado - GuestStatus

ValorDescripcion
PENDINGInvitado registrado, sin respuesta
CONFIRMEDInvitado confirmo asistencia via RSVP
DECLINEDInvitado declino la invitacion
ATTENDEDInvitado asistio al evento (verificado por QR/check-in)

6.6 Roles del Sistema - RoleType

ValorDescripcion
SUPER_ADMINAdministrador global de la plataforma Nvito
PLATFORM_ADMINAdministrador de plataforma. Lectura cross-org, escritura en orgs asignadas
ORGANIZATION_OWNERPropietario de la organizacion (tenant)
ORGANIZATION_ADMINAdministrador de la organizacion
EVENT_MANAGERGestor completo del evento
EVENT_EDITOREditor del evento (puede modificar contenido)
EVENT_COLLABORATORColaborador con acceso limitado al evento
EVENT_VIEWERSolo lectura del evento

Nota: SUPER_ADMIN y PLATFORM_ADMIN son mutuamente excluyentes -- un usuario no puede tener ambos roles simultaneamente.

6.7 Scope del Rol - RoleScope

ValorDescripcion
GLOBALAplica a toda la plataforma (Super Admin, Platform Admin)
ORGANIZATIONAplica a nivel de organizacion
EVENTAplica a un evento especifico

6.8 Plan de Suscripcion - SubscriptionPlan

ValorDescripcion
FREEPlan gratuito con funcionalidades basicas
ESSENTIALPlan esencial para eventos individuales
PLUSPlan plus con herramientas avanzadas
VIPPlan VIP con todas las funcionalidades
ENTERPRISEPlan empresarial con soporte prioritario

6.9 Tipo de Media - MediaType

ValorDescripcion
IMAGEImagen (JPG, PNG, WebP)
VIDEOVideo (MP4, WebM)
AUDIOAudio (MP3, WAV, OGG)

6.10 Categoria de Media - MediaCategory

ValorDescripcion
GALLERYImagen de galeria del evento
HEROImagen principal / hero de la invitacion
OG_IMAGEImagen para meta tags Open Graph (SEO)
AUDIO_GUESTBOOKAudio del libro de visitas
LOGOLogo de la organizacion
AVATARAvatar del usuario
COVERImagen de portada del evento

6.11 Restricciones Dieteticas - DietaryRestriction

ValorDescripcion
VEGETARIANDieta vegetariana
VEGANDieta vegana
GLUTEN_FREESin gluten (celiaco)
HALALComida halal
KOSHERComida kosher
NUT_FREESin frutos secos
DAIRY_FREESin lacteos
OTHEROtra restriccion (detalle en notas)

6.12 Tipos de Servicio de Evento - EventServiceType

Los 18 servicios que pueden habilitarse por evento:

ValorDescripcion
INVITATIONInvitacion digital
LOCATIONSUbicaciones del evento
GUEST_LISTLista de invitados
RSVPConfirmacion de asistencia
GUEST_GROUPSGrupos de invitados
ITINERARYPrograma / itinerario del evento
TABLESAsignacion de mesas
QR_PASSESPases QR de entrada
CHECK_INCheck-in en el evento
GALLERYGaleria de fotos
AUDIO_GUESTBOOKLibro de visitas con audio
GUEST_UPLOADSSubida de fotos por invitados
CUSTOM_DOMAINDominio personalizado
BACKGROUND_MUSICMusica de fondo en la invitacion
GIFT_REGISTRYMesa de regalos
ACCOMMODATIONInformacion de hospedaje
SPONSORSPatrocinadores del evento
PRAYERSeccion de oracion/bendicion
THANK_YOUSeccion de agradecimiento
DRESS_CODECodigo de vestimenta

6.13 Estado de Notificacion - NotificationStatus

ValorDescripcion
PENDINGNotificacion en cola de envio
SENTEnviada al proveedor (Resend)
DELIVEREDEntregada al destinatario
FAILEDFallo en el envio
BOUNCEDRebotada (email invalido)

6.14 Tipo de Cliente - ClientType

ValorDescripcion
INDIVIDUALPersona fisica que contrata un evento
COMPANYPersona moral / empresa

6.15 Estado del Cliente - ClientStatus

ValorDescripcion
PROSPECTCliente potencial, en etapa de cotizacion
ACTIVECliente con evento(s) activo(s) en curso
COMPLETEDTodos los eventos del cliente finalizaron
INACTIVECliente inactivo o dado de baja

6.16 Fuente de Adquisicion - AcquisitionSource

ValorDescripcion
SOCIAL_MEDIACaptado via redes sociales (Instagram, Facebook, etc)
REFERRALReferido por otro cliente
GOOGLEBusqueda en Google / SEO / Google Ads
WEBSITEVisita directa al sitio web de Nvito
DIRECTContacto directo (evento presencial, networking)
OTHEROtra fuente (detalle en acquisitionDetail)

6.17 Otros Enums

EnumValores
GiftRegistryTypeAMAZON, LIVERPOOL, PALACIO_HIERRO, SANBORNS, COPPEL, SEARS, OTHER
MusicSourceTypeSPOTIFY, YOUTUBE, FILE, SPOTIFY_PLAYLIST, APPLE_MUSIC_PLAYLIST, YOUTUBE_PLAYLIST
TableShapeROUND, SQUARE, RECTANGLE, OVAL
LocationTypeVENUE, CEREMONY, RECEPTION, PARKING, OTHER
RsvpTypeREQUIRED, OPTIONAL, CLOSED
InvitationAnalyticsEventTypeVIEW, RSVP_OPEN, RSVP_SUBMIT, LINK_CLICK, SHARE, DOWNLOAD
PreRegistrationStatusPENDING, REGISTERED, ACTIVATED, EXPIRED, CANCELLED
CommunicationCampaignStatusDRAFT, SENDING, COMPLETED, FAILED
CommunicationMessageStatusPENDING, SENT, DELIVERED, FAILED, OPENED, BOUNCED
CollaboratorInvitationStatusPENDING, ACCEPTED, DECLINED, EXPIRED, CANCELLED
TemplateStatusDRAFT, ACTIVE, INACTIVE
NotificationChannelEMAIL, WHATSAPP, BOTH
PaymentMethodTRANSFER, CARD, CASH, OTHER
PaymentStatusPENDING, PARTIAL, PAID, REFUNDED, CANCELLED
PaymentTypeSERVICE_PAYMENT, CASH_FUND_CONTRIBUTION
StripePaymentStatusPENDING, PROCESSING, SUCCEEDED, FAILED, REFUNDED, CANCELLED
PaymentLinkStatusACTIVE, USED, EXPIRED, CANCELLED
AdjustmentTypeNONE, DISCOUNT, COURTESY, SURCHARGE
AIGenerationStatusPENDING, COMPLETED, FAILED
QRPassTypeENTRY, EXIT, VIP
MobileRoleHOST, GUEST
ClientTypeINDIVIDUAL, COMPANY
ClientStatusPROSPECT, ACTIVE, COMPLETED, INACTIVE
AcquisitionSourceSOCIAL_MEDIA, REFERRAL, GOOGLE, WEBSITE, DIRECT, OTHER
InvitationSourceINTERNAL, EXTERNAL

7. Indices y Politicas

7.1 Indices Principales

Los indices estan disenados para optimizar las consultas mas frecuentes del sistema multi-tenant.

Indices por Tenant (Organization)

TablaIndiceProposito
organizations(clerk_org_id)Lookup por Clerk ID en autenticacion
organizations(slug)Busqueda por slug unico
organizations(plan)Filtro por plan de suscripcion
events(organization_id)Eventos por organizacion
events(organization_id, date DESC)Eventos por organizacion ordenados por fecha
notifications(organization_id, status, created_at DESC)Notificaciones por org con filtro de estado

Indices de Clientes

TablaIndiceProposito
clients(organization_id)Clientes por organizacion
clients(status)Filtro por estado del cliente
clients(type)Filtro por tipo (individual/empresa)
clients(assigned_to_id)Clientes por responsable asignado
clients(organization_id, status)Clientes por org filtrados por estado

Indices de Usuarios y Roles

TablaIndiceProposito
users(clerk_user_id)Lookup rapido en autenticacion
users(email)Busqueda por email
users(is_super_admin)Filtro de super admins
users(is_platform_admin)Filtro de platform admins
user_roles(user_id)Roles de un usuario
user_roles(role)Usuarios por tipo de rol
user_roles(organization_id)Roles por organizacion
user_roles(event_id)Roles por evento

Indices de Eventos e Invitaciones

TablaIndiceProposito
events(event_type_id)Eventos por tipo
events(status)Filtro por estado del evento
events(date)Ordenamiento por fecha
invitations(event_id)Invitaciones de un evento
invitations(status)Filtro por estado de invitacion
invitations(slug) (idx_invitations_slug)Lookup publico por slug
sections(invitation_id, order)Secciones ordenadas de una invitacion

Indices de Invitados y RSVP

TablaIndiceProposito
guests(event_id)Invitados de un evento
guests(event_id, status)Invitados filtrados por estado
guests(event_id, deleted_at)Invitados activos (soft delete)
guests(email)Busqueda por email
rsvps(invitation_id)RSVPs de una invitacion
rsvps(invitation_id, status)RSVPs filtrados por estado
rsvps(deleted_at)RSVPs activos (soft delete)

Indices de Analytics

TablaIndiceProposito
invitation_analytics_events(invitation_id, created_at)Eventos de analytics por invitacion
invitation_analytics_events(event_type)Filtro por tipo de evento analytics

7.2 Constraints Unicos

TablaConstraintDescripcion
organizationsslug UNIQUESlug unico por organizacion
organizationsclerk_org_id UNIQUEUn Clerk org por organizacion
usersclerk_user_id UNIQUEUn Clerk user por usuario
usersemail UNIQUEEmail unico global
events(slug, organization_id) UNIQUESlug unico por organizacion
invitationsslug UNIQUESlug unico global para URLs publicas
guests(email, event_id) UNIQUEUn invitado por email por evento
rsvps(guest_id, invitation_id) UNIQUEUn RSVP por invitado por invitacion
user_roles(userId, role, scope, organizationId, eventId) UNIQUESin roles duplicados
invitation_versions(invitation_id, version_number) UNIQUENumero de version unico por invitacion
qr_passescode UNIQUECodigo QR unico global
table_assignmentsguest_id UNIQUEUn invitado en una sola mesa
custom_domainsdomain UNIQUEDominio personalizado unico global
pre_registrations(email, organization_id) UNIQUEUn pre-registro por email por organizacion
templatesslug UNIQUESlug unico global por template
service_packagesslug UNIQUESlug unico global por paquete
clients(email, organization_id) UNIQUEUn cliente por email por organizacion

7.3 Relaciones con Cascade Delete

Las siguientes relaciones tienen onDelete: Cascade, lo que significa que al eliminar el padre se eliminan los hijos automaticamente:

  • Event -> Invitation, Guest, GuestGroup, Location, ItineraryItem, QRPass, Media, EventTable, AudioGuestbook, Accommodation, GiftRegistry, BackgroundMusic, CustomDomain, EventServiceConfig, EventContract, CommunicationCampaign
  • Invitation -> Section, InvitationVersion, InvitationApproval, Music, RSVP, InvitationAnalyticsEvent, InvitationAnalyticsSummary, AIGeneration
  • Guest -> RSVP, QRPass, TableAssignment
  • GiftRegistry -> GiftRegistryItem, GiftBankAccount
  • Accommodation -> AccommodationHotel, AccommodationTransportOption
  • BackgroundMusic -> BackgroundMusicTrack
  • CommunicationCampaign -> CommunicationMessage
  • UserRole -> (cascade desde User, Organization, Event)

7.4 Soft Delete

Los siguientes modelos implementan soft delete con el campo deletedAt:

  • Organization
  • User
  • Event
  • Guest
  • RSVP
  • Media
  • InvitationVersion
  • TableAssignment
  • Template
  • Client

8. Seed Data

El archivo seed.ts es idempotente (puede ejecutarse multiples veces sin duplicar datos). Utiliza upsert para crear o actualizar registros existentes.

8.1 Super Admin

CampoValor
Emaildeveloper.pezfred@gmail.com
Clerk User IDuser_395ntlOdgiElz480VOcKNaYfeXj
NombreAlfredo Admin
isSuperAdmintrue
Rol asignadoSUPER_ADMIN con scope GLOBAL
Preferencestimezone: America/Mexico_City, language: es, notifications: email + push

8.2 Tipos de Evento (9)

#SlugNombreIconoSecciones Default
1weddingBodaringHero, Couple, Itinerary, Location, RSVP, GiftRegistry, Gallery
2xv-anosXV AnoscrownHero, Quincanera, Itinerary, Location, RSVP, Gallery
3baptismBautizochurchHero, Details, Location, RSVP, Gallery
4birthdayCumpleanoscakeHero, Details, Location, RSVP, Gallery
5first-communionPrimera ComunioncrossHero, Details, Location, RSVP, Gallery
6baby-showerBaby ShowerbottleHero, Details, Location, RSVP, GiftRegistry
7graduationGraduacioncapHero, Details, Location, RSVP, Gallery
8corporateEvento CorporativobldgHero, Details, Itinerary, Location, RSVP
9otherOtropartyHero, Details, Location, RSVP

8.3 Paquetes de Servicios (5)

#SlugNombrePrecio (MXN)RecomendadoServicios Incluidos
1essentialEssential$1,499NoINVITATION, GUEST_LIST, RSVP, LOCATIONS
2plusPlus$2,999SiEssential + ITINERARY, GUEST_GROUPS, TABLES, QR_PASSES
3vipVIP$4,999NoPlus + CHECK_IN, GALLERY, AUDIO_GUESTBOOK, GUEST_UPLOADS
4eliteElite$9,999NoTodos los servicios del VIP (para multiples eventos)
5personalizadoPersonalizado$0NoSin servicios predefinidos (seleccion a medida)

8.4 Templates de Invitacion (16)

#SlugNombreTipo EventoFeaturedFuentes
1wedding-classicBoda Clasica RomanticaweddingSiPlayfair Display / Lato
2wedding-gardenBoda Jardin BotanicoweddingSiCormorant Garamond / Nunito
3wedding-modernBoda Moderna MinimalistaweddingSiRaleway / DM Sans
4xv-princessXV Anos Princesa GlamorosaxvSiCormorant Garamond / Montserrat
5xv-modernXV Anos Moderna ElegantexvNoPoppins / DM Sans
6birthday-festiveCumpleanos Festivo VibrantebirthdaySiQuicksand / Nunito
7birthday-elegantCumpleanos ElegantebirthdayNoCormorant Garamond / Inter
8baptism-celestialBautizo Celestial PastelbaptismSiCormorant Infant / Nunito
9baptism-goldenBautizo Clasico DoradobaptismNoPlayfair Display / Lato
10communion-serenePrimera Comunion EspiritualcommunionSiCormorant Garamond / Source Sans Pro
11babyshower-sweetBaby Shower Dulce y TiernobabyshowerSiQuicksand / Nunito
12babyshower-modernBaby Shower Moderno NeutralbabyshowerNoPoppins / DM Sans
13graduation-classicGraduacion Academica ClasicagraduationSiMerriweather / Open Sans
14graduation-boldGraduacion Moderna BoldgraduationNoPoppins / Inter
15corporate-cleanCorporativo ProfesionalcorporateSiInter / DM Sans
16other-versatileVersatil UniversalotherNoDM Sans / Inter

Distribucion de Templates por Tipo de Evento

Tipo de EventoCantidadTemplates
Boda (wedding)3Classic, Garden, Modern
XV Anos (xv)2Princess, Modern
Cumpleanos2Festive, Elegant
Bautizo2Celestial, Golden
Primera Comunion1Serene
Baby Shower2Sweet, Modern
Graduacion2Classic, Bold
Corporativo1Clean
Otro1Versatile

Secciones Comunes en Templates de Boda

Los templates de boda incluyen 14 secciones con variantes configurables:

  1. hero - Encabezado principal con imagen
  2. welcome - Mensaje de bienvenida
  3. event_details - Detalles del evento
  4. countdown - Cuenta regresiva
  5. story - Historia de la pareja (timeline vertical)
  6. gallery - Galeria de fotos
  7. itinerary - Programa del evento
  8. location - Ubicacion con mapa
  9. registry - Mesa de regalos
  10. accommodation - Hospedaje
  11. faq - Preguntas frecuentes
  12. rsvp - Formulario de confirmacion
  13. music - Reproductor de musica
  14. footer - Pie de pagina

Notas Adicionales

Campos JSON Importantes

ModeloCampoEstructura
Organizationsettings{ timezone, language, dateFormat, features: { aiEnabled } }
Organizationlimits{ maxEvents, maxGuestsPerEvent, maxStorage, maxAIGenerations }
Userpreferences{ timezone, language, notifications: { email, push } }
Eventsettings{ allowPlusOnes, requireDietaryInfo, theme, primaryColor }
InvitationschemaEstructura completa de secciones y componentes de la invitacion
Invitationtheme{ colors, fonts, spacing } - Tema visual de la invitacion
SectionconfigConfiguracion especifica segun el tipo de seccion
Templateconfig{ colors, fonts, sections[] con variantes, animaciones }
TemplatesampleDataDatos de ejemplo para preview/demo del template
RSVPdietaryInfo{ vegetarian: 1, vegan: 0, allergies: ["nuts"] }
GuestmetadataCampos personalizados adicionales por invitado
AuditLogchangesRegistro de cambios anteriores y nuevos valores

Proveedores Externos

ServicioProveedorCampo de referencia
AutenticacionClerkclerkUserId, clerkOrgId
EmailResendprovider, providerId
AlmacenamientoAWS S3htmlUrl, cssUrl, jsUrl, url
MapasGoogle MapsplaceId, googleMapsUrl
IAVariosprovider, model en AIGeneration
Esta pagina fue util?