- Mapeo campos en base de datos: ubicacion→provincia, telefono→subcategoria, email→direccion, web→enlaceGoogleMaps y añadido puntuacion. - Migración suave (ensureColumn) para añadir las nuevas columnas sin perder datos existentes si la DB ya existía con el esquema antiguo. - Actualización de rutas del servidor para guardar/leer los nuevos campos y convertir el NULL a valor nulo por defecto en puntuacion. - Soporte PWA: añadido meta tags (manifest, theme-color, apple-touch-icon) y registro de service worker para instalación del app y shell offline.
74 lines
2.0 KiB
JavaScript
74 lines
2.0 KiB
JavaScript
import Database from "better-sqlite3";
|
|
import { fileURLToPath } from "url";
|
|
import { dirname, join } from "path";
|
|
|
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
const dbPath = join(__dirname, "../localesp.db");
|
|
const db = new Database(dbPath);
|
|
|
|
db.exec(`
|
|
CREATE TABLE IF NOT EXISTS locales (
|
|
id TEXT PRIMARY KEY,
|
|
nombre TEXT NOT NULL,
|
|
descripcion TEXT,
|
|
provincia TEXT,
|
|
subcategoria TEXT,
|
|
direccion TEXT,
|
|
enlaceGoogleMaps TEXT,
|
|
puntuacion INTEGER DEFAULT 0,
|
|
categoria TEXT,
|
|
fecha TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
lat REAL,
|
|
lng REAL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS pendientes (
|
|
id TEXT PRIMARY KEY,
|
|
nombre TEXT NOT NULL,
|
|
descripcion TEXT,
|
|
provincia TEXT,
|
|
subcategoria TEXT,
|
|
direccion TEXT,
|
|
enlaceGoogleMaps TEXT,
|
|
puntuacion INTEGER DEFAULT 0,
|
|
categoria TEXT,
|
|
estado TEXT DEFAULT 'pendiente',
|
|
fechaPropuesta TEXT DEFAULT CURRENT_TIMESTAMP,
|
|
lat REAL,
|
|
lng REAL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS config (
|
|
id TEXT PRIMARY KEY,
|
|
datos TEXT
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id TEXT PRIMARY KEY,
|
|
email TEXT UNIQUE NOT NULL,
|
|
password TEXT NOT NULL,
|
|
created TEXT DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
`);
|
|
|
|
// Migración suave: si la base de datos ya existía con el esquema antiguo
|
|
// (sin provincia/subcategoria/direccion/enlaceGoogleMaps/puntuacion),
|
|
// añadimos las columnas que falten sin borrar nada, porque
|
|
// CREATE TABLE IF NOT EXISTS no modifica tablas ya creadas.
|
|
function ensureColumn(table, column, definition) {
|
|
const cols = db.prepare(`PRAGMA table_info(${table})`).all().map(c => c.name);
|
|
if (!cols.includes(column)) {
|
|
db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
|
|
}
|
|
}
|
|
|
|
for (const table of ["locales", "pendientes"]) {
|
|
ensureColumn(table, "provincia", "TEXT");
|
|
ensureColumn(table, "subcategoria", "TEXT");
|
|
ensureColumn(table, "direccion", "TEXT");
|
|
ensureColumn(table, "enlaceGoogleMaps", "TEXT");
|
|
ensureColumn(table, "puntuacion", "INTEGER DEFAULT 0");
|
|
}
|
|
|
|
export default db;
|