Skip to main content

STACK_BACKOFFICE_CONTENT - Documentación para Desarrolladores

Descripción General

Stack de gestión de contenido del backoffice. Administra notas periodísticas (globales, fixture, perfil), mensajería masiva (push y pantalla), posts de perfil (5 variantes), billboard/cards publicitarios, eventos con plantillas/stickers, transcripción de audio/video, y generación automática de contenido.

Arquitectura

STACK_BACKOFFICE_CONTENT/
├── backOfficecontent.yaml # Template SAM (~80 funciones Lambda)
├── build_backOffice_content.sh
├── layer/
│ ├── database_bocontent/ # Lógica de dominio
│ │ └── database.py
│ ├── querys_bocontent/ # Templates SQL
│ │ └── query.py
│ ├── response_formatter_bocontent/
│ │ └── response_formatter.py
│ ├── s3_bocontent/
│ │ └── s3.py # S3: media, eventos, backgrounds
│ └── utils_bocontent/
│ └── utils.py
└── services/
├── billboard/ # Publicidad & campañas
├── card/ # Cards dentro de billboards
├── configurationContent/ # Configuración de la app
├── cognito/ # Info de Cognito (público)
├── eventos/ # Eventos deportivos
├── eventos-backgrounds/ # Fondos para eventos
├── eventos-filter/ # Filtros de eventos
├── eventos-plantillas/ # Plantillas de diseño
├── eventos-stickers/ # Biblioteca de stickers
├── eventos-stickers-category/ # Categorías de stickers
├── eventos-type/ # Tipos de eventos
├── generate-note-profile/ # Notas generadas IA por perfil
├── generate-note-x-torneo/ # Notas generadas IA por torneo
├── generate-text-db/ # Templates de texto generado
├── global_notes/ # Notas del sistema
├── message-by-admin-gral/ # Broadcast admin (700s timeout)
├── message-by-league/ # Mensajes por liga
├── message-by-phase/ # Mensajes por fase
├── message-by-player/ # Mensajes directos
├── message-by-team/ # Mensajes por equipo
├── message-by-tour/ # Mensajes por torneo
├── message-of-team/ # Mensajes de equipo (120s)
├── message-of-phase/ # Mensajes de fase
├── message-of-player/ # Mensajes de jugador
├── message-of-tour/ # Mensajes de torneo
├── metadatacontent/ # Metadata de contenido
├── msg-welcome-by-league/ # Mensajes bienvenida
├── note-finish-match/ # Notas fin de partido
├── note-post-fixture-featured/ # Notas post-partido destacadas
├── note-pre-fixture-goalscorer/ # Notas goleadores
├── note-pre-fixture-vmv/ # Notas VMV
├── note-pre-fixture-vs/ # Notas VS (enfrentamientos)
├── note-welcome/ # Notas de bienvenida
├── noti-admin/ # Notificaciones admin (600s/2048MB)
├── group-type-note/ # Tipos de notas agrupados
├── profile_post/ # Posts de perfil (genérico)
├── profile_post_bo/ # Posts backoffice
├── profile_post_league/ # Posts de liga
├── profile_post_team/ # Posts de equipo
├── profile_post_user_generic/ # Posts usuario genérico
├── profilepostxpost/ # Notas de post (512MB)
├── profilepostxpostleague/ # Notas de post x liga
├── profilepostxpostteam/ # Notas de post x equipo (1024MB/160s)
├── profilepostusergeneric/ # Notas de post genérico
├── push_csv/ # Push por CSV
├── push_csv_detail/ # Detalle push CSV
├── push_topic_detail/ # Detalle push por topic
├── register-web/ # Registro web público
├── reporter/ # Reportería
├── reporter_media/ # Media de reporteros
├── tags-metadata/ # Tags de metadata
├── topic/ # Campañas push (900s/1024MB)
├── transcribe/ # Transcripción AWS (600s/2048MB)
├── update_profile_admin/ # Perfiles admin
├── update_profile_for_put/ # Pre-fetch perfiles
├── update_profile_for_put_admin/
├── update_profile_manual/ # Actualización manual
└── users_from_team/ # Usuarios de equipo

Runtime y Configuración

PropiedadValor
Python3.13
ArquitecturaARM64
Timeout default30s
Memoria default256MB
AuthCognito JWT (mixto: algunos endpoints públicos)

Funciones con Configuración Especial

FunciónTimeoutMemoriaNotas
message-by-admin-gral POST700s256MBBroadcast masivo en lotes de 500 tokens
message-of-team POST120s256MBMensajes a equipo
topic POST900s1024MBCampañas push Firebase masivas
transcribe GET/POST600s2048MBAWS Transcribe async
noti-admin GET600s2048MBNotificaciones admin
profilepostxpost GET30s512MBNotas de post
profilepostxpostteam GET160s1024MBNotas de post x equipo
generate-text-db100s256MBTemplates de texto

Sistema de Mensajería

Flujo de Broadcast (message-by-admin-gral):

  1. Admin elige audiencia: global | seer | athlete | webuser | seven-days
  2. Se obtienen tokens FCM de la audiencia seleccionada
  3. Se envía push en lotes de 500 tokens via Firebase
  4. Se crea notificación de pantalla para cada usuario
  5. Timeout elevado (700s) por volumen de envíos

Tipos de Mensaje:

  • Admin → Global: Broadcast a todos o filtrado por tipo
  • Admin → Liga/Fase/Equipo/Torneo: Mensajes especializados
  • Admin → Jugador: Mensajes directos
  • Equipo/Fase/Torneo: Mensajes de usuario dentro de contexto

Sistema de Notas de Fixture

Tipos:

  • note-pre-fixture-vs — Enfrentamientos previos
  • note-pre-fixture-vmv — Material multimedia
  • note-pre-fixture-goalscorer — Goleadores destacados
  • note-post-fixture-featured — Destacados post-partido
  • note-finish-match — Resumen de fin de partido
  • note-welcome — Bienvenida

Group Type Note:

Agrupa todos los tipos de notas disponibles: historic_matches, destacado, pre_fixture_vmv, pre_fixture_goleadores.

Sistema de Profile Posts

5 variantes de posts:

  1. profile_post — Posts genéricos del perfil (JWT required)
  2. profile_post_bo — Posts desde backoffice (JWT required)
  3. profile_post_team — Posts de equipo (público, sin auth)
  4. profile_post_league — Posts de liga (público)
  5. profile_post_user_generic — Posts de usuario genérico (público)

Notas asociadas (profilepostxpost*):

Cada variante tiene notas asociadas con endpoints propios. Las de equipo son las más pesadas (1024MB/160s) por volumen de datos.

Billboard y Cards

Sistema de publicidad con relación Billboard → Cards.

Modo App vs Admin:

  • App (is_app=true): Retorna billboard activo con sus cards
  • Admin (is_app=false): Lista paginada de todos los billboards

Eventos

Sistema completo con:

  • Eventos: CRUD principal con filtros
  • Backgrounds: Fondos de imagen (S3)
  • Plantillas: Templates de diseño (CRUD)
  • Stickers: Biblioteca con categorías
  • Types: Tipos de evento

Transcripción

Usa AWS Transcribe para audio/video:

  1. POST sube archivo a S3
  2. Lanza job de transcripción asíncrono
  3. GET consulta estado/resultado
  4. Timeout 600s / Memoria 2048MB

Push Notifications

Por CSV:

  • Upload CSV con lista de tokens/emails
  • Envío masivo programado

Por Topic (Campañas):

  • Crea topic en Firestore
  • Suscribe usuarios según filtros
  • Envía notificación al topic
  • Timeout 900s / Memoria 1024MB

Endpoints Públicos (sin auth)

  • GET /billboard — Billboard activo
  • GET/POST /card — Cards
  • GET /configurationContent — Config app
  • GET /cognito — Info Cognito
  • POST /register-web — Registro web
  • GET /profile_post_team — Posts de equipo
  • GET /profile_post_league — Posts de liga
  • GET /profile_post_user_generic — Posts genéricos
  • GET /push_csv* — Push CSV
  • GET/POST /reporter_media — Media
  • GET/POST/PUT /topic — Campañas

Tablas PostgreSQL

  • global_note — Notas globales
  • note_fixture — Notas de fixture (pre/post)
  • profile_post — Posts de perfil
  • profile_post_note — Notas de posts
  • billboard — Billboards
  • card — Cards
  • event — Eventos
  • event_background — Fondos
  • event_template — Plantillas
  • sticker — Stickers
  • sticker_category — Categorías
  • message — Mensajes
  • notification_screen — Notificaciones de pantalla
  • push_topic — Topics de push
  • transcription — Transcripciones

Build y Deploy

cd STACK_BACKOFFICE_CONTENT
sudo bash ./build_backOffice_content.sh 1 -d # Dev local
sudo bash ./build_backOffice_content.sh 2 -d # Dev deploy
sudo bash ./build_backOffice_content.sh 2 -q # QA deploy
sudo bash ./build_backOffice_content.sh 2 -p # Prod deploy