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
| Propiedad | Valor |
|---|---|
| Python | 3.13 |
| Arquitectura | ARM64 |
| Timeout default | 30s |
| Memoria default | 256MB |
| Auth | Cognito JWT (mixto: algunos endpoints públicos) |
Funciones con Configuración Especial
| Función | Timeout | Memoria | Notas |
|---|---|---|---|
| message-by-admin-gral POST | 700s | 256MB | Broadcast masivo en lotes de 500 tokens |
| message-of-team POST | 120s | 256MB | Mensajes a equipo |
| topic POST | 900s | 1024MB | Campañas push Firebase masivas |
| transcribe GET/POST | 600s | 2048MB | AWS Transcribe async |
| noti-admin GET | 600s | 2048MB | Notificaciones admin |
| profilepostxpost GET | 30s | 512MB | Notas de post |
| profilepostxpostteam GET | 160s | 1024MB | Notas de post x equipo |
| generate-text-db | 100s | 256MB | Templates de texto |
Sistema de Mensajería
Flujo de Broadcast (message-by-admin-gral):
- Admin elige audiencia:
global|seer|athlete|webuser|seven-days - Se obtienen tokens FCM de la audiencia seleccionada
- Se envía push en lotes de 500 tokens via Firebase
- Se crea notificación de pantalla para cada usuario
- 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 previosnote-pre-fixture-vmv— Material multimedianote-pre-fixture-goalscorer— Goleadores destacadosnote-post-fixture-featured— Destacados post-partidonote-finish-match— Resumen de fin de partidonote-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:
- profile_post — Posts genéricos del perfil (JWT required)
- profile_post_bo — Posts desde backoffice (JWT required)
- profile_post_team — Posts de equipo (público, sin auth)
- profile_post_league — Posts de liga (público)
- 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:
- POST sube archivo a S3
- Lanza job de transcripción asíncrono
- GET consulta estado/resultado
- 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 activoGET/POST /card— CardsGET /configurationContent— Config appGET /cognito— Info CognitoPOST /register-web— Registro webGET /profile_post_team— Posts de equipoGET /profile_post_league— Posts de ligaGET /profile_post_user_generic— Posts genéricosGET /push_csv*— Push CSVGET/POST /reporter_media— MediaGET/POST/PUT /topic— Campañas
Tablas PostgreSQL
global_note— Notas globalesnote_fixture— Notas de fixture (pre/post)profile_post— Posts de perfilprofile_post_note— Notas de postsbillboard— Billboardscard— Cardsevent— Eventosevent_background— Fondosevent_template— Plantillassticker— Stickerssticker_category— Categoríasmessage— Mensajesnotification_screen— Notificaciones de pantallapush_topic— Topics de pushtranscription— 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