Saltar al contenido principal

Módulos del Sistema

Backend — 22 Módulos

Cada módulo es independiente: tiene su propio controller, service, gateways y DTOs. Se comunican a través de la capa ACL para acceder a base de datos y servicios externos.

Módulos principales

MóduloPropósitoEndpoints destacados
AuthValidación de tokens Firebase. 4 guards: FirebaseAuthGuard (requiere token), OptionalFirebaseAuthGuard (público o autenticado), AdminOnlyGuard, CreatorOnlyGuard.POST /auth/validate
UsersPerfiles de usuario: búsqueda, perfil público, perfil propio, seguidores/seguidos, sugerencias, registro, bloqueo, fotos de perfil y portada.GET /users/me, GET /users/profile/:username, POST /users/register, POST /users/:id/follow, DELETE /users/:id/follow
PostsFeed principal, explorar, categorías, scoring de popularidad, crear post con media.GET /posts/feed, GET /posts/explore, GET /posts/category/:id, POST /posts
MediaSubida y eliminación de imágenes/videos vía Cloudflare R2. URLs prefirmadas con TTL por tipo de contenido.POST /media/upload, DELETE /media/:id
LikesLikes en posts y likes en comentarios.POST /likes/post/:id, POST /likes/comment/:id
CommentsComentarios con respuestas anidadas (self-referencing FK). Edición y eliminación.POST /comments, GET /comments/post/:id, PUT /comments/:id, DELETE /comments/:id
MessagesConversaciones 1:1 entre usuarios. Almacenadas en Firestore, con fallback REST.GET /messages/conversations, GET /messages/:conversationId
StoreTienda del creador: CRUD de productos, compras, ventas, estado de envío.POST /store/items, GET /store/items, POST /store/purchase, GET /store/sales
VODVideo on demand: subida, compra o alquiler, expiración automática.POST /vod, GET /vod, POST /vod/:id/purchase
LiveLive streaming: crear stream, credenciales RTMPS, reproducción HLS, paywall, configuración de chat.POST /live, GET /live/:id, PUT /live/:id/paywall, PUT /live/:id/chat-settings
PaymentsCheckout multi-proveedor, historial de pagos, webhooks entrantes.POST /payments/checkout, GET /payments/history, POST /payments/webhook
Stripe ConnectOnboarding de creadores en Stripe Connect. Estado de cuenta, webhooks.POST /stripe-connect/onboard, GET /stripe-connect/status, POST /stripe-connect/webhook
CampaignsCampañas de crowdfunding, donaciones, propinas en posts.POST /campaigns, GET /campaigns, POST /campaigns/:id/donate, POST /campaigns/tip
Fan WallMuro de fans en perfil de creador: escribir entrada, dar like, eliminar.POST /fan-wall, GET /fan-wall/:userId, DELETE /fan-wall/:id
AdminPanel de administración: gestión de usuarios, roles, liquidaciones, toggles de proveedores de pago.GET /admin/users, PUT /admin/users/:id/role, GET /admin/settlements
ReportsReportes de contenido o usuarios.POST /reports, GET /reports
WebhooksWebhooks de Cloudflare Stream con validación de firma HMAC.POST /webhooks/cloudflare-stream
NotificationsNotificaciones en tiempo real vía SSE, conteo de no leídas, marcar como leído.GET /notifications/stream, GET /notifications/unread-count, POST /notifications/mark-read
HealthHealth check para monitoreo y smoke tests de deploy.GET /status/health
Support TicketsTickets de soporte con IDs de conversación IMAP.POST /support-tickets, GET /support-tickets, PUT /support-tickets/:id
WalletBilletera del usuario: balance y transacciones (créditos/débitos).GET /wallet, GET /wallet/transactions

Módulos de infraestructura

MóduloPropósito
ACL (Anti-Corruption Layer)Agrupa 4 sub-módulos de integración: DB (27 entidades + repositorios), Cloudflare R2, Cloudflare Stream, Firebase, Proveedores de pago.
InfrastructureLogger (Winston), caché TTL en memoria, HTTP module global, configuración TypeORM.

Entidades de base de datos (27)

app_user, user_profile, follow, post, post_media, audiovisual, post_score, post_like, comment, comment_like, item, sale, shipping_info, vod, vod_purchase, wallet, app_transaction, payment, settlement, stripe_connect_account, campaign, donation, fan_wall_entry, fan_wall_like, live_stream, report, support_ticket, notification_read_state


Frontend — Rutas y Componentes

Rutas principales (Next.js App Router)

Rutas públicas (sin autenticación):

RutaDescripción
/welcomeLanding page para usuarios no autenticados
/loginInicio de sesión
/register*Registro, verificación de email, éxito (URL ofuscada)
/forgot-passwordRecuperación de contraseña
/termsTérminos y privacidad
/payment/success, /payment/failureResultado de pago externo

Rutas protegidas (requieren autenticación):

RutaDescripción
/ (feed)Home: barra de categorías, carrusel de artistas, sugerencias, scroll infinito de posts
/exploreExplorar posts públicos rankeados por popularidad
/category/[id]Posts filtrados por categoría
/createCrear nuevo post con subida de media
/inboxBandeja de mensajes directos
/notificationsCentro de notificaciones
/live/[id]Visualizador de stream en vivo (reproductor HLS.js + chat en tiempo real)
/profile/[username]Perfil público de otro usuario
/profile/mePerfil propio: feed personal, seguidores, siguiendo
/profile/me/editEditar perfil
/profile/me/followingLista de usuarios seguidos
/profile/me/storeGestionar productos de la tienda (creador)
/profile/me/purchasesHistorial de compras
/profile/me/videosBiblioteca de VOD
/profile/me/walletBilletera y balance
/profile/me/settingsConfiguración de la cuenta
/profile/me/supportTickets de soporte
/profile/me/adminPanel de administración (solo admin)
/creator/connectOnboarding de Stripe Connect (creador)

Componentes principales

Features (componentes de dominio):

ComponenteDescripción
FeedList / FeedListClientFeed principal con scroll infinito (Server + Client)
FeedPostCardClientTarjeta de post individual con interacciones
CategoryBarBarra horizontal de categorías
ArtistsBannerCarouselCarrusel de creadores destacados (hero de la home)
ProfileView / ProfileViewClientVista de perfil con tabs (posts, tienda, VOD, campañas, fan wall)
ExploreGridClientGrid de posts en explorar
LivePlayer + LiveChatPanelReproductor HLS.js + chat Firestore para streams en vivo
PostDetailModalModal de detalle de post con comentarios
CommentModalModal de comentarios con respuestas anidadas
CreatePostFormFormulario de creación de post
PublishChoiceModalModal para elegir tipo de publicación (tienda, VOD, live, campaña)
TipPostModalModal para enviar propina a un post
StoreTab / VodTab / CampaignTabTabs del perfil de creador
FanWallMuro de fans interactivo
InboxPageClientBandeja de mensajes con conversaciones
WalletPageClientPágina de billetera con historial de transacciones
GlobalUploadBarBarra de progreso de subida de video (global)
LoginForm / RegisterForm / ForgotPasswordFormFormularios de autenticación
WelcomeScreenPantalla de bienvenida con llamadas a la acción
EditProfileModalModal de edición de perfil
CreatorSearchAutocompleteBúsqueda de creadores con autocompletado

UI (componentes reutilizables):

Avatar, Button, Card, Input, Tabs, BottomSheet, Modal, ShareModal, PaymentModal, ReportModal, ProfileHeader, ImageContainer, MembershipCard, OTPInput, CountrySelector, SignedImage, entre otros.

Layout (estructura de página):

MainLayoutShell, Sidebar (224px desktop), AppHeader, MobileBottomNav (4 tabs), Footer, GlobalUploadBar.

Contextos React (7)

ContextoHookPropósito
AuthuseAuth()Usuario autenticado, perfil, login/logout/registro
UiModeuseUiMode()Modo oscuro/claro, persiste en localStorage
PostInteractionsusePostInteraction()Likes optimistas con rollback en error
CreatePostModaluseCreatePostModal()Control del modal de creación de post
NotificationsuseNotifications()Conteo de notificaciones no leídas (polling + Firestore)
InboxUnreaduseInboxUnread()Conteo de mensajes no leídos
UploadQueueuseUploadQueue()Cola de subida de videos con progreso

API Layer

  • 23 archivos en lib/api/: cliente singleton, server fetch, tipos, y un archivo por dominio (auth, feed, posts, profile, users, messages, notifications, live, store, vod, broadcasts, campaigns, fan-wall, payments, connect, admin, reports, support)
  • Auto-desenvolvimiento del ResponseWrapper del backend
  • Token inyectado desde cookie en cada request
  • Timeout global de 30 segundos
  • Subida de archivos con progreso vía XMLHttpRequest