Cargando contenido...
/** * La clase Database se utiliza para realizar operaciones básicas de creación, lectura, * actualización y eliminación (CRUD) en una base de datos almacenada en localStorage del * navegador. * * // Agregar un registro a la base de datos * const nuevoRegistro = { nombre: "Juan", alquiler: 100 }; * db.agregar(nuevoRegistro); * * // Actualizar un registro existente en la base de datos * const registroActualizado = { nombre: "Pedro", alquiler: 150 }; * db.actualizar(0, registroActualizado); * * // Borrar un registro de la base de datos * db.borrar(0); * * // Agregar un registro que ya existe * try { * const registroActualizado = { alquiler: 250 }; * db.actualizar(0, registroActualizado); * } catch (error) { * console.error(error.message); * } * * // Agregamos algunos registros * db.agregar({ id: 1, nombre: "Juan", edad: 25, ciudad: "Madrid" }); * db.agregar({ id: 2, nombre: "Ana", edad: 30, ciudad: "Barcelona" }); * db.agregar({ id: 3, nombre: "Pedro", edad: 40, ciudad: "Valencia" }); * * // Exportamos los datos a un archivo JSON * // <button id="exportar">Esportar</button> * document.querySelector('#exportar').addEventListener('click',evt => { * evt.preventDefault() * db.exportarAJSON('usuarios.csv') * }) * * // Imprimimos algunas estadísticas sobre la base de datos actualizada * console.log("Número total de registros:", db.numRegistros()); * * // Importamos nuevos datos desde un archivo CSV * //<input type="file" id="archivo"> * //<button id="importar">Importar</button> * const btnImportar = document.getElementById('importar'); * btnImportar.addEventListener('click', () => { * const archivo = document.getElementById('archivo').files[0]; * const db = new Database('secreto'); * db.importarDesdeJSON(archivo) * }); */ class Database { constructor(password) { if (password !== "secreto") { throw new Error("La clave es incorrecta"); } this.password = password; } // Leer los datos de la base de datos leer() { const datos = JSON.parse(localStorage.getItem('datos')); return datos ? datos : []; } // Escribir los datos en la base de datos escribir(datos) { localStorage.setItem('datos', JSON.stringify(datos)); } // Verificar si ya existe un registro con los mismos datos verificarExistencia(registro) { const datos = this.leer(); let existe = false; for (let i = 0; i < datos.length; i++) { const existente = datos[i]; let iguales = true; for (let propiedad in existente) { if (existente.hasOwnProperty(propiedad) && registro.hasOwnProperty(propiedad)) { if (existente[propiedad] !== registro[propiedad]) { iguales = false; break; } } } if (iguales) { existe = true; continue; } } return existe; } // Agregar un nuevo registro a la base de datos agregar(registro) { if (this.verificarExistencia(registro)) { throw new Error("El registro ya existe en la base de datos"); } const datos = this.leer(); datos.push(registro); this.escribir(datos); } // Actualizar un registro existente en la base de datos actualizar(id, registro) { const datos = this.leer(); const registroActualizado = { ... datos[id], ...registro }; if (this.verificarExistencia(registroActualizado)) { throw new Error("El registro ya existe en la base de datos"); } datos[id] = registroActualizado; this.escribir(datos); } // Borrar un registro de la base de datos borrar(id) { const datos = this.leer(); datos.splice(id, 1); this.escribir(datos); } // Ordenar los registros de la base de datos por una propiedad determinada ordenar(propiedad) { const datos = this.leer(); if (datos.length<= 1) { return datos; } return datos.sort((registroA, registroB) => { if (registroA[propiedad] < registroB[propiedad]) { return -1; } if (registroA[propiedad] > registroB[propiedad]) { return 1; } return 0; }) } // Obtener estadísticas de la base de datos estadisticas() { const datos = this.leer(); const numRegistros = datos.length; const propiedades = {}; datos.forEach(registro => { for (let propiedad in registro) { if (! propiedades.hasOwnProperty(propiedad)) { propiedades[propiedad] = 1; } else { propiedades[propiedad]++; } } }); return {numRegistros, propiedades}; } // Exportar registros a un archivo JSON exportarAJSON(nombreArchivo) { const registros = this.leer(); const json = JSON.stringify(registros); const blob = new Blob([json], {type: "application/json"}); if (navigator.msSaveBlob) { // Para Internet Explorer navigator.msSaveBlob(blob, nombreArchivo); } else { const link = document.createElement("a"); if (link.download !== undefined) { const url = URL.createObjectURL(blob); link.setAttribute("href", url); link.setAttribute("download", nombreArchivo); link.style.visibility = "hidden"; document.body.appendChild(link); link.click(); document.body.removeChild(link); } } } // Importar registros desde un objeto JSON importarDesdeJSON(archivo) { const lector = new FileReader(); lector.onload = () => { const datos = JSON.parse(lector.result); datos.map(item => this.agregar(item)) }; lector.readAsText(archivo); } // Obtener el número de registros en la base de datos numRegistros() { const datos = this.leer(); return datos.length; } }