Files
registry_dashboard/data.h
T
egutierrez ddf8e76ad6 feat(dashboard): functions explorer + top-level tabs + pie chart fit
- Pie charts (Purity, Kind) ahora reciben plot_h explicito para que respeten
  el panel contenedor y no desborden cuando la ventana se reduce.
- Nueva pestana "Explorer": split layout con lista filtrable a la izquierda
  (search por nombre/descripcion + combos lang/domain) y panel de detalle
  a la derecha con tabs Code (read-only multiline), Documentation (selectable
  text), Tests (con dropdown si la funcion tiene varios tests, muestra lang +
  file_path + codigo) y Metadata (id, version, file_path, returns,
  uses_functions, uses_types, params_schema, example, notes).
- Reorganizacion de navegacion: TabBar movido arriba, justo debajo de la
  toolbar. Tabs: Dashboard | Explorer | Projects | Apps | Analysis | Types.
  Cada tab ocupa toda la zona de contenido. Dashboard incluye KPIs + charts
  + tabla de Recent Functions.
- Cache del Explorer (lista de funciones) invalidado en trigger_reload.
- Nuevas funciones HTTP: load_function_detail_http, load_all_functions_http,
  load_unit_tests_http (todas usan /api/databases/registry/query con escape
  defensivo de comilla simple en IDs).

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

173 lines
3.9 KiB
C++

#pragma once
#include <string>
#include <vector>
#include <cstdint>
struct RegistryStats {
int total_functions = 0;
int total_types = 0;
int total_apps = 0;
int total_analysis = 0;
int total_unit_tests = 0;
int total_proposals = 0;
int tested_functions = 0;
int pure_functions = 0;
int impure_functions = 0;
};
struct LangCount {
std::string lang;
int count = 0;
};
struct DomainCount {
std::string domain;
int count = 0;
};
struct KindCount {
std::string kind;
int count = 0;
};
struct DateCount {
std::string date; // YYYY-MM-DD
int count = 0;
};
struct FunctionRow {
std::string id;
std::string name;
std::string lang;
std::string domain;
std::string kind;
std::string purity;
std::string description;
std::string created_at;
bool tested = false;
};
struct AppRow {
std::string id;
std::string name;
std::string lang;
std::string domain;
std::string description;
std::string framework;
std::string repo_url;
std::string dir_path;
};
struct AnalysisRow {
std::string id;
std::string name;
std::string lang;
std::string domain;
std::string description;
};
struct TypeRow {
std::string id;
std::string name;
std::string lang;
std::string domain;
std::string algebraic;
std::string description;
};
struct VaultRow {
std::string id;
std::string name;
std::string path;
std::string description;
bool symlink = false;
};
struct ProjectRow {
std::string id;
std::string name;
std::string description;
int apps_count = 0;
int analyses_count = 0;
int vaults_count = 0;
};
// Test unitario asociado a una funcion (1:N — una funcion puede tener varios).
struct UnitTestRow {
std::string id;
std::string function_id;
std::string name;
std::string lang;
std::string file_path;
std::string code;
std::string created_at;
};
// Detalle completo de una funcion (codigo + documentacion).
// Cargado on-demand cuando el usuario selecciona una funcion en Explorer.
struct FunctionDetail {
std::string id;
std::string name;
std::string lang;
std::string domain;
std::string kind;
std::string purity;
std::string version;
std::string signature;
std::string description;
std::string code;
std::string documentation;
std::string notes;
std::string example;
std::string params_schema;
std::string uses_functions;
std::string uses_types;
std::string returns;
std::string error_type;
std::string file_path;
std::string created_at;
bool tested = false;
};
struct ProjectDetail {
std::string id; // "" si no hay seleccion; "orphans" para huerfanas
std::string name;
std::string description;
std::vector<AppRow> apps;
std::vector<AnalysisRow> analyses;
std::vector<VaultRow> vaults;
};
// All data loaded from registry.db in one shot
struct RegistryData {
RegistryStats stats;
std::vector<LangCount> by_lang;
std::vector<DomainCount> by_domain;
std::vector<KindCount> by_kind;
std::vector<DateCount> by_date; // last 30 days
std::vector<FunctionRow> recent_funcs; // last 20
std::vector<AppRow> apps;
std::vector<AnalysisRow> analyses;
std::vector<TypeRow> types;
std::vector<ProjectRow> projects;
int orphan_apps = 0;
int orphan_analyses = 0;
int orphan_vaults = 0;
// For chart data (populated by prepare_chart_data)
std::vector<std::string> lang_labels;
std::vector<float> lang_values;
std::vector<std::string> domain_labels;
std::vector<float> domain_values;
std::vector<std::string> kind_labels;
std::vector<float> kind_values;
std::vector<std::string> date_labels;
std::vector<float> date_values;
void prepare_chart_data();
};
// Load all data from registry.db. Returns true on success.
bool load_registry_data(const char* db_path, RegistryData& out);