Skip to main content

STACK_BACKOFFICE - Documentación para Desarrolladores

Descripción General

Stack de backoffice principal que provee la administración completa de la plataforma MAS10. Gestiona jugadores, equipos, torneos, ligas, fixtures, ejercicios, datos de referencia, autenticación Cognito, CRM, nutrición y productos.

Arquitectura

STACK_BACKOFFICE/
├── backOffice.yaml # Template SAM (~63 funciones Lambda)
├── build_backOffice.sh # Script de build/deploy
├── layer/
│ ├── database_backoffice/ # Lógica de dominio del backoffice
│ │ └── database.py # Operaciones de BD específicas
│ ├── querys_backoffice/ # Templates SQL
│ │ └── query.py
│ ├── response_formatter_backoffice/
│ │ └── response_formatter.py # Formateo de respuestas
│ ├── s3_backoffice/
│ │ └── s3.py # Operaciones S3 (avatares, media)
│ └── utils_backoffice/
│ └── utils.py # Utilidades específicas
└── services/
├── backoffice-categories/ # Categorías deportivas
├── backoffice-cities/ # Ciudades
├── backoffice-cognito/ # Gestión Cognito
├── backoffice-countries/ # Países
├── backoffice-crm/ # CRM
├── backoffice-download/ # Descargas
├── backoffice-exercise/ # Ejercicios de entrenamiento
├── backoffice-fixture/ # Fixtures (generación auto con ChatGPT-4o)
├── backoffice-historic-skills/ # Skills históricas (600s timeout)
├── backoffice-league/ # Ligas
├── backoffice-nutrition/ # Nutrición
├── backoffice-player/ # Jugadores (3 variantes)
├── backoffice-products/ # Productos/tienda
├── backoffice-provinces/ # Provincias
├── backoffice-register/ # Registro de usuarios
├── backoffice-team/ # Equipos
└── backoffice-tournament/ # Torneos

Runtime y Configuración

PropiedadValor
Python3.13
ArquitecturaARM64
Timeout default30s
Memoria default256MB
AuthAWS Cognito JWT
API TypeRegional REST

Servicios Destacados

Generación de Fixture con IA

El endpoint POST /backoffice-fixture puede generar fixtures automáticamente usando ChatGPT-4o. Timeout extendido de 600s y 2048MB para esta operación.

Historic Skills

Operación pesada de cálculo de habilidades históricas. Timeout: 600s, Memoria: 2048MB.

Gestión de Jugadores (3 variantes)

  • backoffice-player/ — Jugadores paginados con búsqueda y ordenamiento
  • backoffice-player-v2/ — Variante con diferente formato de respuesta
  • backoffice-player-v3/ — Versión más reciente con optimizaciones

Capas y Dependencias

Layers usado:

  • layer_common_313/ — Capa compartida Python 3.13
    • common_database/database.py — PostgreSQL operations
    • common_httpcaller/locale.py — Response helpers
    • common_utils/utils.py — JWT parsing, utilities
    • common_aws/aws.py — Secrets Manager, S3, Lambda invocations
    • common_query/query.py — SQL templates compartidos

Layer propio:

  • database_backoffice/database.py — Queries específicas del backoffice
  • querys_backoffice/query.py — Templates SQL del dominio
  • response_formatter_backoffice/ — Formateo de respuestas para BO
  • s3_backoffice/s3.py — Operaciones S3 (upload de avatares en 3 tamaños)

Tablas de Base de Datos

PostgreSQL (principales):

  • userprofile — Perfiles de usuario
  • team — Equipos
  • team_userprofile — Relación jugador-equipo
  • tournament — Torneos
  • league — Ligas
  • fixture — Fixtures
  • fixture_info — Información adicional de fixture
  • exercise — Ejercicios de entrenamiento
  • category — Categorías deportivas
  • country, province, city — Datos geográficos
  • nutrition — Datos nutricionales
  • product — Productos/tienda
  • crm — Datos CRM

Patrones de Código

Handler típico:

def lambda_handler(event, _context):
if event.get('warming'):
return {'statusCode': 200, 'body': 'warm'}

email = utils.get_email_by_token(event)
if email is None:
return locales.get_response_standar(Exception("User not found"), {}, 401)

# Lógica de negocio...
result = common_source.executeQueryNotInjection(sql, params)
return locales.get_response_standar(None, {"data": result}, 200)

Paginación:

page = int(event['queryStringParameters'].get('page', 0))
limit = int(event['queryStringParameters'].get('limit', 50))
offset = page * limit

Upload de avatares (3 tamaños):

# Original
s3.upload_avatar(blob, key)
# 50px thumbnail
s3.upload_avatar_resized(blob, key + "_50", 50)
# 100px thumbnail
s3.upload_avatar_resized(blob, key + "_100", 100)

Seguridad

  • Todos los endpoints requieren JWT de Cognito (excepto OPTIONS para CORS)
  • SQL injection prevention via executeQueryNotInjection() con placeholders %(param)s
  • CORS headers habilitados en todos los endpoints
  • Secretos cargados via AWS Secrets Manager

Build y Deploy

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