HaidoDocs

Arquitectura

Arquitectura técnica de TPV El Haido: capas, flujo de datos y componentes

Arquitectura

TPV El Haido sigue una arquitectura de capas con separación clara entre frontend, backend y servicios externos.

Diagrama General

Loading diagram...

Capas

Frontend (React)

CapaResponsabilidadUbicación
UIRenderizado, interacciónsrc/components/
HooksLógica de componentessrc/hooks/
StoreEstado globalsrc/store/
ServicesLógica de negociosrc/services/
ModelsTipos TypeScriptsrc/models/

Backend (Tauri/Rust)

CapaResponsabilidadUbicación
CommandsAPI para frontendsrc-tauri/src/lib.rs
DatabaseOperaciones SQLitesrc-tauri/src/database.rs
ModelsStructs Rustsrc-tauri/src/models.rs

Sidecars

SidecarFunciónPuerto
aeat-bridgeComunicación SOAP con AEAT3001
thermal-printer-cliImpresión ESC/POSCLI

Flujo de Datos

Lectura de Productos

Loading diagram...

Creación de Pedido

Loading diagram...

Patrones de Arquitectura

Strategy Pattern (Storage)

El sistema usa el patrón Strategy para abstraer el almacenamiento:

Loading diagram...

Result Pattern (Errores)

Todas las operaciones asíncronas retornan Result<T, E>:

// En lugar de: try { const products = await getProducts(); } catch (e) { // handle error } // Usamos: const result = await getProducts(); if (isErr(result)) { console.error(result.error.code); } else { const products = result.value; }

Comunicación IPC

Frontend → Rust

// TypeScript import { invoke } from '@tauri-apps/api/core'; const products = await invoke<Product[]>('get_products');
// Rust #[tauri::command] fn get_products(state: State<AppState>) -> Result<Vec<Product>, String> { state.db.get_products() }

Rust → Frontend (Eventos)

// Rust app.emit("order-created", &order)?;
// TypeScript import { listen } from '@tauri-apps/api/event'; await listen('order-created', (event) => { console.log('New order:', event.payload); });

Base de Datos

Schema SQLite

-- Productos CREATE TABLE products ( id TEXT PRIMARY KEY, name TEXT NOT NULL, price REAL NOT NULL, category TEXT NOT NULL, brand TEXT, icon_type TEXT, selected_icon TEXT, uploaded_image TEXT, stock INTEGER DEFAULT 0 ); -- Categorías CREATE TABLE categories ( id TEXT PRIMARY KEY, name TEXT NOT NULL, description TEXT, icon TEXT ); -- Pedidos CREATE TABLE orders ( id TEXT PRIMARY KEY, date TEXT NOT NULL, total REAL NOT NULL, status TEXT DEFAULT 'inProgress', payment_method TEXT DEFAULT 'efectivo', table_number INTEGER, user_id TEXT ); -- Items de pedido CREATE TABLE order_items ( id TEXT PRIMARY KEY, order_id TEXT NOT NULL, product_id TEXT NOT NULL, name TEXT NOT NULL, price REAL NOT NULL, quantity INTEGER DEFAULT 1, FOREIGN KEY (order_id) REFERENCES orders(id) );

Ubicación del Archivo

SistemaRuta
Windows%APPDATA%\com.elhaido.tpv\tpv-haido.db
macOS~/Library/Application Support/com.elhaido.tpv/tpv-haido.db
Linux~/.config/com.elhaido.tpv/tpv-haido.db

Seguridad

Sandboxing Tauri

Tauri aplica sandboxing por defecto:

  • Acceso a sistema de archivos restringido
  • Red solo a dominios permitidos
  • IPC tipado entre Rust y JS

Permisos

Configurados en src-tauri/capabilities/:

{ "permissions": [ "shell:allow-spawn", "http:default", "updater:default" ] }

Siguiente Paso

Actions

On this page