Volver a la wiki

Tabla D1: quick_links — atajos a servicios externos

Tabla D1: quick_links — atajos a servicios externos

Creada en migración 0017_create_quick_links.sql · workspace · 2026-05-07

Descripción

Tabla SQLite en Cloudflare D1 que almacena los atajos del staff a paneles y servicios externos. Es la fuente de datos de la tool /tools/quicklinks del workspace.


Esquema

CREATE TABLE IF NOT EXISTS quick_links (
  id          INTEGER PRIMARY KEY AUTOINCREMENT,
  label       TEXT    NOT NULL,                          -- Nombre visible (máx 80 chars)
  url         TEXT    NOT NULL,                          -- URL destino (máx 500 chars)
  description TEXT,                                      -- Comentario opcional
  category    TEXT    NOT NULL DEFAULT 'general',        -- Ver enum QuickLinkCategory
  icon_url    TEXT,                                      -- Icono personalizado (opcional)
  position    INTEGER NOT NULL DEFAULT 0,               -- Orden dentro de la categoría
  is_shared   INTEGER NOT NULL DEFAULT 1,               -- 1 = visible para todo el staff
  owner_id    TEXT,                                     -- Email CF Access del creador ('seed' para los del seed)
  archived_at TEXT,                                     -- ISO-8601; NULL = activo (soft-delete)
  created_at  TEXT    NOT NULL DEFAULT (datetime('now')),
  updated_at  TEXT    NOT NULL DEFAULT (datetime('now'))
);

Índices

NombreColumnasPropósito
idx_quick_links_category(category, position)Orden canónico dentro de cada categoría
idx_quick_links_archived(archived_at)Filtrar activos/archivados eficientemente
idx_quick_links_owner(owner_id)Futuros filtros por propietario / mis links

Tipo TypeScript

// src/lib/types.ts
export type QuickLinkCategory =
  | 'infrastructure' | 'code' | 'ai' | 'monitoring'
  | 'product' | 'selfhosted' | 'admin' | 'general';

export interface QuickLink {
  id: number;
  label: string;
  url: string;
  description: string | null;
  category: QuickLinkCategory;
  icon_url: string | null;
  position: number;
  is_shared: number;        // SQLite: 0 | 1
  owner_id: string | null;
  archived_at: string | null;
  created_at: string;
  updated_at: string;
}

Soft-delete

El borrado lógico se implementa escribiendo un timestamp ISO-8601 en archived_at. El endpoint GET /api/quicklinks excluye registros archivados por defecto (archived_at IS NULL). Para incluirlos: ?archived=1.

Para restaurar un registro: PUT /api/quicklinks/:id con { "archived": false } → escribe archived_at = NULL.


Seed (migración 0018)

Se pre-cargan ~25 servicios del equipo con INSERT OR IGNORE (idempotente). El campo owner_id = 'seed' identifica estos registros. Fuentes del seed: CLAUDE.md, memoria/reference_*, infra_*.


API asociada

EndpointMétodoAcción
/api/quicklinksGETListar (filtros: category, archived)
/api/quicklinksPOSTCrear nuevo atajo
/api/quicklinks/:idGETObtener por id
/api/quicklinks/:idPUTActualizar parcial (SET dinámico)
/api/quicklinks/:idDELETEEliminar físicamente

Todas las operaciones de escritura registran actividad via logActivity (actor extraído del header cf-access-authenticated-user-email).


Véase también

Subir