Files
roaauto/frontend/src/db/schema.js
Marius Mutu c3482bba8d feat(frontend): Vue 3 + wa-sqlite + sync engine + auth + layouts
- package.json with Vue 3, Pinia, vue-router, wa-sqlite, Tailwind CSS 4, Vite
- wa-sqlite database layer with IDBBatchAtomicVFS (offline-first)
- Full schema mirroring backend tables (vehicles, orders, invoices, etc.)
- SyncEngine: fullSync, incrementalSync, pushQueue for offline queue
- Auth store with JWT parsing, login/register, plan tier detection
- Router with all routes and auth navigation guards
- AppLayout (sidebar desktop / bottom nav mobile) + AuthLayout
- Login/Register views connected to API contract
- SyncIndicator component (online/offline status)
- Reactive SQL query composable (useSqlQuery)
- Placeholder views for dashboard, orders, vehicles, appointments, catalog, settings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 17:22:50 +02:00

89 lines
4.2 KiB
JavaScript

export const SCHEMA_SQL = `
CREATE TABLE IF NOT EXISTS tenants (
id TEXT PRIMARY KEY, tenant_id TEXT, nume TEXT, cui TEXT, reg_com TEXT,
adresa TEXT, telefon TEXT, email TEXT, iban TEXT, banca TEXT,
plan TEXT DEFAULT 'free', trial_expires_at TEXT, created_at TEXT, updated_at TEXT
);
CREATE TABLE IF NOT EXISTS vehicles (
id TEXT PRIMARY KEY, tenant_id TEXT NOT NULL,
client_nume TEXT, client_telefon TEXT, client_email TEXT,
client_cod_fiscal TEXT, client_adresa TEXT,
nr_inmatriculare TEXT, marca_id TEXT, model_id TEXT,
an_fabricatie INTEGER, serie_sasiu TEXT, tip_motor_id TEXT,
oracle_id INTEGER, created_at TEXT, updated_at TEXT
);
CREATE TABLE IF NOT EXISTS orders (
id TEXT PRIMARY KEY, tenant_id TEXT NOT NULL,
nr_comanda TEXT, data_comanda TEXT, vehicle_id TEXT,
tip_deviz_id TEXT, status TEXT DEFAULT 'DRAFT',
km_intrare INTEGER, observatii TEXT,
client_nume TEXT, client_telefon TEXT, nr_auto TEXT,
marca_denumire TEXT, model_denumire TEXT,
total_manopera REAL DEFAULT 0, total_materiale REAL DEFAULT 0, total_general REAL DEFAULT 0,
token_client TEXT, created_by TEXT, oracle_id INTEGER, created_at TEXT, updated_at TEXT
);
CREATE TABLE IF NOT EXISTS order_lines (
id TEXT PRIMARY KEY, order_id TEXT NOT NULL, tenant_id TEXT NOT NULL,
tip TEXT, descriere TEXT,
norma_id TEXT, ore REAL, pret_ora REAL,
um TEXT, cantitate REAL, pret_unitar REAL,
total REAL, mecanic_id TEXT, ordine INTEGER,
oracle_id INTEGER, created_at TEXT, updated_at TEXT
);
CREATE TABLE IF NOT EXISTS invoices (
id TEXT PRIMARY KEY, tenant_id TEXT NOT NULL, order_id TEXT,
nr_factura TEXT, serie_factura TEXT, data_factura TEXT,
modalitate_plata TEXT, client_nume TEXT, client_cod_fiscal TEXT, nr_auto TEXT,
total_fara_tva REAL, tva REAL, total_general REAL,
oracle_id INTEGER, created_at TEXT, updated_at TEXT
);
CREATE TABLE IF NOT EXISTS appointments (
id TEXT PRIMARY KEY, tenant_id TEXT NOT NULL, vehicle_id TEXT,
client_nume TEXT, client_telefon TEXT, data_ora TEXT,
durata_minute INTEGER DEFAULT 60, observatii TEXT,
status TEXT DEFAULT 'PROGRAMAT', order_id TEXT,
oracle_id INTEGER, created_at TEXT, updated_at TEXT
);
CREATE TABLE IF NOT EXISTS catalog_marci (
id TEXT PRIMARY KEY, tenant_id TEXT NOT NULL, denumire TEXT, activ INTEGER DEFAULT 1,
oracle_id INTEGER, updated_at TEXT
);
CREATE TABLE IF NOT EXISTS catalog_modele (
id TEXT PRIMARY KEY, marca_id TEXT, denumire TEXT, oracle_id INTEGER, updated_at TEXT
);
CREATE TABLE IF NOT EXISTS catalog_ansamble (
id TEXT PRIMARY KEY, tenant_id TEXT NOT NULL, denumire TEXT, oracle_id INTEGER, updated_at TEXT
);
CREATE TABLE IF NOT EXISTS catalog_norme (
id TEXT PRIMARY KEY, tenant_id TEXT NOT NULL, cod TEXT, denumire TEXT,
ore_normate REAL, ansamblu_id TEXT, oracle_id INTEGER, updated_at TEXT
);
CREATE TABLE IF NOT EXISTS catalog_preturi (
id TEXT PRIMARY KEY, tenant_id TEXT NOT NULL, denumire TEXT, pret REAL, um TEXT,
oracle_id INTEGER, updated_at TEXT
);
CREATE TABLE IF NOT EXISTS catalog_tipuri_deviz (
id TEXT PRIMARY KEY, tenant_id TEXT NOT NULL, denumire TEXT, oracle_id INTEGER, updated_at TEXT
);
CREATE TABLE IF NOT EXISTS catalog_tipuri_motoare (
id TEXT PRIMARY KEY, tenant_id TEXT NOT NULL, denumire TEXT, oracle_id INTEGER, updated_at TEXT
);
CREATE TABLE IF NOT EXISTS mecanici (
id TEXT PRIMARY KEY, tenant_id TEXT NOT NULL, user_id TEXT,
nume TEXT, prenume TEXT, activ INTEGER DEFAULT 1, oracle_id INTEGER, updated_at TEXT
);
CREATE TABLE IF NOT EXISTS _sync_queue (
id TEXT PRIMARY KEY, table_name TEXT, row_id TEXT,
operation TEXT, data_json TEXT, created_at TEXT, synced_at TEXT
);
CREATE TABLE IF NOT EXISTS _sync_state (table_name TEXT PRIMARY KEY, last_sync_at TEXT);
CREATE TABLE IF NOT EXISTS _local_settings (key TEXT PRIMARY KEY, value TEXT);
PRAGMA journal_mode=WAL;
`;
export const SYNC_TABLES = [
'vehicles', 'orders', 'order_lines', 'invoices', 'appointments',
'catalog_marci', 'catalog_modele', 'catalog_ansamble', 'catalog_norme',
'catalog_preturi', 'catalog_tipuri_deviz', 'catalog_tipuri_motoare', 'mecanici'
];