Files
sqlite_api/app.md
T
Egutierrez af13fd849c feat: endpoints de mutacion y de projects
- handlers_mutations.go: POST add_app/add_analysis/add_vault/reindex
- handlers_projects.go: GET projects y project detail (apps/analysis/vaults nested)
- handlers.go + main.go: cablear nuevas rutas
- handlers_test.go: ajustes minimos
- app.md: documentar endpoints v0.2

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-28 22:05:08 +02:00

3.5 KiB

name, lang, domain, description, tags, uses_functions, uses_types, framework, entry_point, dir_path
name lang domain description tags uses_functions uses_types framework entry_point dir_path
sqlite_api go infra API REST HTTP read-only sobre registry.db y operations.db de cada app. Permite consultas SQL (solo SELECT/PRAGMA), busqueda FTS5, exploracion de tablas y schema. Bind por defecto a localhost:8484.
service
api
sqlite
http
registry
fts5
net/http main.go projects/fn_monitoring/apps/sqlite_api

Uso

# Arrancar (default: 127.0.0.1:8484)
cd apps/sqlite_api && go run -tags fts5 .

# Bind personalizado
go run -tags fts5 . --bind 0.0.0.0:8484

Endpoints

Metodo Path Descripcion
GET /health Health check
GET /api/databases Lista DBs disponibles (registry + ops:*)
GET /api/databases/:db/tables Tablas y vistas de una DB
GET /api/databases/:db/schema Schema SQL completo
POST /api/databases/:db/query Ejecuta query SQL read-only
GET /api/databases/:db/fts?q=...&table=... Busqueda FTS5 directa
GET /api/projects Lista proyectos con conteos nested + orphans [v0.2]
GET /api/projects/{id} Detalle apps/analyses/vaults; id="orphans" para huerfanas [v0.2]
POST /api/reindex Ejecuta fn index server-side, devuelve {ok, output} [v0.2]
POST /api/add/app Body {name, lang, domain, project, description} → scaffold + reindex [v0.2]
POST /api/add/analysis Body {name, project, packages[], description} → invoca fn run init_jupyter_analysis [v0.2]
POST /api/add/vault Body {name, project, path, description} → crea dir/symlink + entry en vault.yaml [v0.2]

Seguridad

  • Solo queries SELECT, PRAGMA, WITH y EXPLAIN
  • SQLite abierto con ?mode=ro (read-only a nivel driver)
  • Timeout de 5 segundos por query
  • Bind a localhost por defecto
  • CORS habilitado para acceso desde frontends

Bases de datos

  • registry — registry.db de la raiz
  • ops:{app} — operations.db de apps/{app}/ y projects/*/apps/{app}/

Auto-descubre operations.db al arrancar escaneando apps/ y projects/*/apps/.

Health check

curl http://localhost:8484/health
# {"status":"ok"}

Puerto

8484 (no colisiona con Metabase 3000, Jupyter 8888, deploy_server 9090).

Estado actual

v0.2 — projects view + mutaciones [done 2026-04-25]

El servicio pasa de read-only puro a soportar mutaciones. Split de handlers:

  • handlers.go: read-only sobre BDs SQLite (queries SELECT/PRAGMA). Sin cambios.
  • handlers_projects.go (nuevo): GET /api/projects y GET /api/projects/{id}. Subqueries con LEFT JOIN por project_id para conteos nested. Helper scanAll() generico para devolver rows como [][]any.
  • handlers_mutations.go (nuevo): POST /api/reindex + POST /api/add/{app,analysis,vault}. Ejecuta el CLI fn via exec.CommandContext desde Server.registryRoot (timeout 60 s). El binario debe existir en {registryRoot}/fn (build local). Validacion de name con regex implicito a-z0-9_.

Server gana campo registryRoot string. NewServer(pool, root) en lugar de NewServer(pool). El root se resuelve en main.go con findRegistryRoot() (env FN_REGISTRY_ROOT o cwd).

Lo siguiente que pega

  • Permisos/auth: ahora cualquier cliente local puede escribir. Para deploy a un VPS habria que anadir token header (similar a X-Registry-Token del registry_api). Por ahora bind 127.0.0.1 mitiga.
  • /api/add/function y /api/add/type (kinds que hoy no se exponen via HTTP). El CLI ya lo soporta; el endpoint seria casi paralelo a /api/add/app.