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>
This commit is contained in:
88
frontend/src/db/schema.js
Normal file
88
frontend/src/db/schema.js
Normal file
@@ -0,0 +1,88 @@
|
||||
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'
|
||||
];
|
||||
Reference in New Issue
Block a user