- 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>
89 lines
4.2 KiB
JavaScript
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'
|
|
];
|