Skip to main content

Documentation Index

Fetch the complete documentation index at: https://wiki.vivla.com/llms.txt

Use this file to discover all available pages before exploring further.

Inbox

El modulo de Inbox gestiona la bandeja de entrada de cada usuario: mensajes internos, notificaciones push (mobile y browser), y preferencias de notificacion. Es el punto central donde convergen alertas de todos los modulos.

Arquitectura

┌──────────────────┐     ┌──────────────────┐     ┌──────────────┐
│  Chat Module     │────▶│  InboxService    │────▶│  Supabase    │
│  Community       │     │                  │     │  inbox_messages│
│  Notifications   │     │  InboxPushNotif. │     └──────────────┘
│  AI              │     │  Service         │
│  System          │     └──────────────────┘
└──────────────────┘            │
                         ┌──────────────┐
                         │  Expo / Web  │
                         │  Push        │
                         └──────────────┘

Tipos de mensaje

TipoSource ToolDescripcion
chat_unreadchatMensajes no leidos en canal
chat_booking_createchatNueva reserva creada
chat_booking_archivechatReserva archivada
chat_shift_createdchatTurno creado
chat_shift_assignedchatTurno asignado
chat_shift_startedchatTurno iniciado
chat_shift_endedchatTurno finalizado
chat_property_assignedchatPropiedad asignada
chat_ticket_createdchatTicket creado
chat_ticket_updatedchatTicket actualizado
chat_ticket_assignedchatTicket asignado
chat_ticket_resolvedchatTicket resuelto
restock_alertcommunityAlerta de reposicion
guide_incompletecommunityGuia incompleta
guide_requestcommunitySolicitud de guia
notification_sentnotificationsNotificacion enviada
notification_failednotificationsFallo de notificacion
ai_daily_summaryaiResumen diario IA
ai_weekly_summaryaiResumen semanal IA
generalsystemMensaje general

Prioridades

PrioridadComportamiento
lowSolo inbox, sin push
normalInbox + push si habilitado
highInbox + push (respeta quiet hours)
urgentInbox + push (ignora quiet hours)

Estados

unreadreadresolvedarchived Soft delete con campo deleted_at.

API Endpoints

MetodoEndpointAuthDescripcion
POST/inbox/messagesBearer / API KeyCrear mensaje (integracion externa)
GET/inbox/messagesBearerListar mensajes del usuario con filtros
GET/inbox/unread-countBearerConteo desglosado por prioridad/tipo/tool
GET/inbox/messages/:idBearerDetalle de mensaje
PATCH/inbox/messages/:idBearerActualizar estado/notas
PATCH/inbox/messages/:id/readBearerMarcar como leido
POST/inbox/messages/batch-readBearerMarcar multiples como leidos
PATCH/inbox/messages/:id/resolveBearerMarcar como resuelto
DELETE/inbox/messages/:idBearerEliminar (soft delete)
POST/inbox/push-subscriptionBearerRegistrar suscripcion push browser
DELETE/inbox/push-subscriptionBearerDesregistrar suscripcion push
GET/inbox/vapid-public-keyBearerObtener clave publica VAPID
GET/inbox/preferencesBearerObtener preferencias de notificacion
PATCH/inbox/preferencesBearerActualizar preferencias

Filtros

Los endpoints de listado aceptan:
  • sourceTool — filtrar por herramienta origen (chat, community, notifications, system, ai)
  • messageTypes — array de tipos de mensaje
  • priority — filtrar por prioridad
  • status — filtrar por estado

Preferencias de usuario

Cada usuario puede configurar:
CampoTipoDescripcion
pushEnabledbooleanActivar push notifications
pushUrgentOnlybooleanSolo push para urgentes
pushCommunitybooleanPush de community
pushChatbooleanPush de chat
pushTicketsbooleanPush de tickets
pushShiftsbooleanPush de turnos
pushAibooleanPush de IA
emailEnabledbooleanActivar emails
emailDigestFrequencystringFrecuencia de digest
quietHoursEnabledbooleanHoras silenciosas
quietHoursTimezonestringTimezone para quiet hours

Push Notifications

El inbox soporta dos canales de push:
  • Expo Push — para vivla-mobile (iOS/Android)
  • Web Push — para el panel web via VAPID/service worker
Las notificaciones respetan las preferencias del usuario y las horas silenciosas (excepto prioridad urgent).

Helpers del servicio

InboxService expone metodos helper para crear mensajes tipados desde otros modulos:
  • createChatBookingCreateMessage() — notificacion de reserva
  • createChatTicketCreatedMessage() — nuevo ticket
  • createChatTicketAssignedMessage() — ticket asignado
  • createChatShiftCreatedMessage() — turno creado
  • createChatPropertyAssignedMessage() — propiedad asignada
  • createGuideIncompleteMessage() — guia incompleta
  • createAIDailySummaryMessage() — resumen IA diario

Estructura de modulo

apps/backend/src/inbox/
  inbox.module.ts
  inbox.controller.ts
  inbox.service.ts
  inbox-push-notification.service.ts
  dto/
    create-message.dto.ts
    update-message.dto.ts
    inbox-filters.dto.ts
    preferences.dto.ts