Volver a la wiki

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:

Endpoints afectados

EndpointCambio
GET /api/biblioteca/wikiNuevo param opcional ?product=
GET /api/biblioteca/wiki?product=crearackFiltra solo docs de usuario
GET /api/biblioteca/wiki?product=workspaceFiltra solo docs de workspace

Véase también

Subir