Carlos Narro d9f3e91aa8 telemetría: tiempo por pantalla (columna seconds) + Aprende/subsecciones
telemetry_daily gana columna `seconds` (migración idempotente ALTER ADD COLUMN
IF NOT EXISTS para el Postgres ya desplegado; create_all para SQLite fresco). El
POST acepta seconds_by_module y lo agrega por clave (tope 86400/clave/envío); el
summary suma y devuelve seconds por módulo/vista. Las claves ya eran genéricas,
así que Aprende ('aprende', 'aprende:<tema>') y las vistas ('today', '__other__')
entran sin cambios de esquema. Tests actualizados.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-04 00:01:46 +02:00

autoayuno-api

Catálogo compartido de alimentos (alimentado de Open Food Facts bajo demanda) y recetas publicables para la app [autoayuno]. Sin cuentas: publicar es anónimo con un deviceToken. Lo personal del usuario vive en su dispositivo; aquí solo lo compartido.

Stack

FastAPI + SQLAlchemy + Postgres (SQLite como fallback en dev). Docker → Dokploy. Dominio: api-autoayuno.carlosnarro.com.

Endpoints

  • GET /health
  • GET /foods?q= — busca en la BD; si hay pocos, importa de Open Food Facts y guarda.
  • POST /foods — alta anónima de un alimento (source=user).
  • GET /recipes?q=, GET /recipes/{id}, POST /recipes — recetas públicas.

Las respuestas usan la forma que espera la app (kcalPer100g, zone, portions, origin).

Desarrollo

pip install -r requirements.txt
uvicorn main:app --reload          # SQLite local por defecto
pytest                             # tests con SQLite en memoria

Producción (Dokploy)

Variable DATABASE_URL con el Postgres. Build por Dockerfile, puerto 8000.

Description
Backend de autoayuno: cat�logo de alimentos (Open Food Facts) y recetas
Readme 78 KiB
Languages
Python 99.3%
Dockerfile 0.7%