Filtro ?product= en endpoint de wiki (Biblioteca)
Cambio funcional introducido en sesión 27, iniciativa I4 del plan post-audit. Autor: @Esquembri. Commit:
96d5238.
Resumen
El endpoint GET /api/biblioteca/wiki (CF Pages Function en functions/api/biblioteca/wiki.ts) acepta ahora el query param ?product=<valor> para filtrar server-side los nodos wiki por su campo product del metadata JSON.
Backwards compatible: sin el parámetro devuelve todos los nodos, exactamente igual que antes.
Motivación
El Help Widget de CreaRack Pro necesitaba mostrar únicamente páginas product: "crearack" (documentación de usuario final) sin exponer páginas internas, de workspace, o de arquitectura técnica. La solución anterior usaba una blacklist por categoría (_PRIVATE_CATEGORIES = {"workspace"}) en core/api_help.py, que era frágil y dependiente de la nomenclatura de categorías.
Implementación
// functions/api/biblioteca/wiki.ts
export const onRequestGet: PagesFunction<Env> = async ({ request, env }) => {
const db = env.DB;
const url = new URL(request.url);
const productFilter = url.searchParams.get('product')?.trim() || null;
// ... query D1 para todos los nodos ...
const articles = result.results.map((node) => {
// ... mapear campos ...
return {
product: (meta.product as string) || 'crearack',
// ...
};
}).filter((a) => productFilter === null || a.product === productFilter);
// ...
};
El filtro se aplica en memoria tras el query D1 (no en SQL). El campo product se extrae del JSON metadata de cada nodo.
Uso en el Help Widget
core/api_help.py ahora pasa params={"product": "crearack"} al llamar al endpoint workspace:
_USER_FACING_PRODUCT = "crearack"
# reemplaza la blacklist anterior: _PRIVATE_CATEGORIES = {"workspace"}
Trade-off conocido y deuda I5
El filtro depende de que el corpus tenga product: crearack correctamente etiquetado en el front-matter de cada página. Según el audit, ~93 páginas sin campo product siguen invisibles al Help Widget. El re-tagging masivo es parte de la iniciativa I5 (pendiente).
Valores product conocidos:
crearack— documentación de usuario final (visible en widget).workspace— documentación interna/workspace (filtrada).- (sin campo) — default
crearacken el mapper, pero inconsistente.
Endpoints afectados
| Endpoint | Cambio |
|---|---|
GET /api/biblioteca/wiki | Nuevo param opcional ?product= |
GET /api/biblioteca/wiki?product=crearack | Filtra solo docs de usuario |
GET /api/biblioteca/wiki?product=workspace | Filtra solo docs de workspace |
Véase también
- [[crearack—conceptos—primeros-pasos]]
- [[crearack—monitoring—que-es-wireless]]
- [[crearack—monitoring—que-es-ups]]
- [[crearack—signage—que-es-signage]]
- [[crearack—terminal—que-es-terminal]]