diff --git a/server/migrate-to-mariadb.js b/server/migrate-to-mariadb.js index 2a4c33b..d9dce12 100644 --- a/server/migrate-to-mariadb.js +++ b/server/migrate-to-mariadb.js @@ -1,7 +1,7 @@ import Database from 'better-sqlite3'; import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; -import mariadb from 'mariadb'; +import * as mariadb from 'mariadb'; const __dirname = dirname(fileURLToPath(import.meta.url)); const SQLITE_PATH = join(__dirname, 'data', 'hospital.db'); @@ -16,6 +16,186 @@ const mariaPool = mariadb.createPool({ connectionLimit: 5, }); +// Table definitions for MariaDB +const CREATE_TABLES = [ + `CREATE TABLE IF NOT EXISTS usuarios ( + id VARCHAR(36) PRIMARY KEY, + apellido VARCHAR(255) NOT NULL, + nombre VARCHAR(255) NOT NULL, + dni VARCHAR(20) NOT NULL UNIQUE, + fechaNacimiento VARCHAR(10), + email VARCHAR(255), + rol VARCHAR(50), + matriculaProfesional VARCHAR(100), + passwordHash VARCHAR(255), + areaId VARCHAR(36), + fechaCreacion VARCHAR(10) + )`, + `CREATE TABLE IF NOT EXISTS pacientes ( + id VARCHAR(36) PRIMARY KEY, + apellido VARCHAR(255) NOT NULL, + nombre VARCHAR(255) NOT NULL, + dni VARCHAR(20) NOT NULL UNIQUE, + fechaNacimiento VARCHAR(10), + sexo VARCHAR(10), + telefono VARCHAR(50), + email VARCHAR(255), + direccion TEXT, + obraSocial VARCHAR(100), + nacionalidad VARCHAR(100), + medicacionHabitual TEXT, + antecedentes TEXT, + alergias TEXT, + grupoSanguineo VARCHAR(10), + historiaClinica TEXT + )`, + `CREATE TABLE IF NOT EXISTS areas ( + id VARCHAR(36) PRIMARY KEY, + nombre VARCHAR(255) NOT NULL UNIQUE + )`, + `CREATE TABLE IF NOT EXISTS camas ( + id VARCHAR(36) PRIMARY KEY, + numero VARCHAR(20) NOT NULL, + areaId VARCHAR(36), + tipo VARCHAR(50) DEFAULT 'Estándar', + estado VARCHAR(20) DEFAULT 'Disponible', + pacienteId VARCHAR(36), + internacionId VARCHAR(36) + )`, + `CREATE TABLE IF NOT EXISTS internaciones ( + id VARCHAR(36) PRIMARY KEY, + pacienteId VARCHAR(36) NOT NULL, + camaId VARCHAR(36), + areaId VARCHAR(36), + fechaIngresoHospital VARCHAR(10), + fechaIngresoClinica VARCHAR(10), + fechaEgreso VARCHAR(10), + diagnosticoIngreso TEXT, + motivoConsulta TEXT, + enfermedadActual TEXT, + antecedentesEnfermedadActual TEXT, + diagnosticoEgreso TEXT, + medicoIngresante VARCHAR(255), + motivoEgreso VARCHAR(50), + activa TINYINT DEFAULT 1, + apache TEXT, + derivacion TEXT + )`, + `CREATE TABLE IF NOT EXISTS evoluciones ( + id VARCHAR(36) PRIMARY KEY, + internacionId VARCHAR(36) NOT NULL, + fecha VARCHAR(10) NOT NULL, + hora VARCHAR(5), + medico VARCHAR(255), + signosVitales TEXT, + examenFisico TEXT, + novedades TEXT, + comentarios TEXT, + pendientes TEXT + )`, + `CREATE TABLE IF NOT EXISTS laboratorios ( + id VARCHAR(36) PRIMARY KEY, + pacienteId VARCHAR(36) NOT NULL, + internacionId VARCHAR(36), + fecha VARCHAR(10) NOT NULL, + hora VARCHAR(5), + tipo VARCHAR(50), + resultados TEXT, + observaciones TEXT, + medicoSolicitante VARCHAR(255) + )`, + `CREATE TABLE IF NOT EXISTS acidosbase ( + id VARCHAR(36) PRIMARY KEY, + pacienteId VARCHAR(36) NOT NULL, + internacionId VARCHAR(36), + fecha VARCHAR(10) NOT NULL, + hora VARCHAR(5), + ph DECIMAL(4,2), + pco2 DECIMAL(6,2), + po2 DECIMAL(6,2), + hco3 DECIMAL(6,2), + be DECIMAL(6,2), + sato2 DECIMAL(6,2), + lactato DECIMAL(6,2), + interpretacion TEXT, + fio2 DECIMAL(6,2) + )`, + `CREATE TABLE IF NOT EXISTS cultivos ( + id VARCHAR(36) PRIMARY KEY, + pacienteId VARCHAR(36) NOT NULL, + internacionId VARCHAR(36), + fechaToma VARCHAR(10), + protocolo VARCHAR(50), + fechaResultado VARCHAR(10), + tipoMuestra VARCHAR(100), + germen TEXT, + sensible TEXT, + resistente TEXT, + estado VARCHAR(50) DEFAULT 'NAF/Pendiente', + observaciones TEXT + )`, + `CREATE TABLE IF NOT EXISTS estudiosComplementarios ( + id VARCHAR(36) PRIMARY KEY, + pacienteId VARCHAR(36) NOT NULL, + internacionId VARCHAR(36), + fecha VARCHAR(10), + tipo VARCHAR(100), + resultado TEXT + )`, + `CREATE TABLE IF NOT EXISTS interconsultas ( + id VARCHAR(36) PRIMARY KEY, + pacienteId VARCHAR(36) NOT NULL, + internacionId VARCHAR(36) NOT NULL, + fecha VARCHAR(10), + servicioInterconsultado VARCHAR(255), + motivo TEXT, + respuestaInterconsulta TEXT, + respuestaFecha VARCHAR(10) + )`, + `CREATE TABLE IF NOT EXISTS atb ( + id VARCHAR(36) PRIMARY KEY, + pacienteId VARCHAR(36) NOT NULL, + internacionId VARCHAR(36) NOT NULL, + antibiotico VARCHAR(255), + fechaInicio VARCHAR(10), + fechaFinalizacion VARCHAR(10) + )`, + `CREATE TABLE IF NOT EXISTS indicaciones ( + id VARCHAR(36) PRIMARY KEY, + internacionId VARCHAR(36) NOT NULL, + tipo VARCHAR(50) NOT NULL, + droga VARCHAR(255), + dosis VARCHAR(100), + frecuenciaHoras INT, + via VARCHAR(50), + descripcion TEXT, + tipoPlan VARCHAR(50), + tipoPlan2 VARCHAR(50), + cantidadMl INT, + cantidadMl2 INT, + tiempoHoras INT, + estado VARCHAR(20) DEFAULT 'Activa', + medicoCrea VARCHAR(255), + fechaCrea VARCHAR(10), + tipoInsulina VARCHAR(50), + unidadesDesayuno INT, + unidadesAlmuerzo INT, + unidadesNoche INT, + indicacionNoFco TEXT + )`, + `CREATE TABLE IF NOT EXISTS movimientos_indicaciones ( + id VARCHAR(36) PRIMARY KEY, + indicacionId VARCHAR(36) NOT NULL, + internacionId VARCHAR(36) NOT NULL, + tipo VARCHAR(50) NOT NULL, + fecha VARCHAR(10) NOT NULL, + profesional VARCHAR(255) NOT NULL, + indicacionPrevia TEXT, + indicacionNueva TEXT + )`, + 'CREATE TABLE IF NOT EXISTS kv (\n `key` VARCHAR(255) PRIMARY KEY,\n value TEXT\n )' +]; + async function migrate() { console.log('Starting migration from SQLite to MariaDB...'); @@ -27,6 +207,28 @@ async function migrate() { console.log('Connected to MariaDB'); try { + // Drop tables in MariaDB first (reverse order due to foreign keys) + const tablesToDrop = [ + 'kv', 'movimientos_indicaciones', 'indicaciones', 'atb', 'interconsultas', + 'estudiosComplementarios', 'cultivos', 'acidosbase', 'laboratorios', + 'evoluciones', 'internaciones', 'camas', 'areas', 'pacientes', 'usuarios' + ]; + console.log('Dropping existing tables...'); + for (const table of tablesToDrop) { + try { + await mariaConn.query(`DROP TABLE IF EXISTS ${table}`); + } catch (e) { + // Ignore errors + } + } + + // Create tables in MariaDB + console.log('Creating tables in MariaDB...'); + for (const sql of CREATE_TABLES) { + await mariaConn.query(sql); + } + console.log('Tables created successfully'); + // Migrate each table const tables = [ 'usuarios', 'pacientes', 'areas', 'camas', 'internaciones',