Skip to content

VyrekXD/UwUDB

Repository files navigation

UwUDB

Una DB fácil de usar para todos que no se corrompe!

UwUDB cuenta con errores dinámicos para saber donde fue donde te equivocaste, esquemas para tener un estricto uso de lo que le puedes meter a la db y todo esta en español!

CAMBIOS

    .- Se mejoro el README
    .- Se agrego eliminarDB en uwuCliente

Puedes ver los cambios de todas las versiones en el CHANGELOG

Contenido

ToDo

    .- Terminar todos los métodos en Documento y DB

Instalación

npm i uwudb --s

Uso

//CommonJS
const uwudb = require('uwudb')

//TypeScript/ES6 Módulos
import { uwuCliente, Esquema } from 'uwudb'

Como puedo usar arrays?

SQL no soporta arrays por default por lo tanto uwudb tampoco

const { Utils} = require('uwudb')
//Aquí tendríamos nuestro array
const miarray = ['Jajaja', 'Hola']
//Creamos nuestro esquema y ponemos array como string
const miesquema = new Esquema({
    array: 'string',
    nombre: 'string'
})
//Creamos nuestra db
const db = cliente.crearDB('arrays', miesquema)
//Establecemos el array como string
db.establecer({array: miarray.toString(), nombre: 'ArraysEnUwUDB'})
//Para obtenerlo usaríamos
const resultado = db.buscarUno({nombre: 'ArraysEnUwUDB'})

console.log(Utils.formatArray(resultado.array))
// ["Jajaja", "Hola"]
console.log(resultado.array)
// "['Jajaja", "Hola']"

class uwuCliente

new uwuCliente({OpcionesCliente})

Esta clase es la base de todo el modulo, en ella puedes crear databases y ver cuales has creado.

Las opciones son variadas:

  • OpcionesCliente.dir: El directorio donde se creara la DB (requerido: Si)

  • OpcionesCliente.nombre: El nombre de el archivo de la DB (requerido: Si)

  • OpcionesCliente.WAL: Inicia la db de sqlite en WAL mode (default: false)

  • OpcionesCliente.verbose: Pasa una función que sera ejecutada con cada acción en sqlite

const uwudb = require('uwudb')
const client = new uwudb.uwuCliente({dir: './database', nombre: 'data', WAL: false, verbose: console.log})

.crearDB(nombre, esquema) -> DB

Crea una nueva db con el esquema y nombre recibidos, devuelve una nueva clase DB

const personas = client.crearDB('personas', personasEsquema)

.eliminarDB(nombre) -> boolean

Elimina una db (Tabla) de uwudb, ten en cuenta que se eliminaran todos los datos de esa DB

client.eliminarDB('personas')

Propiedades

.OpcionesCliente -> OpcionesCliente - Las opciones ingresadas al instanciar la clase

.Databases -> Map<string, DB[]> - Todas las DBs creadas, puedes buscar una por su nombre

.db -> Database - La base cruda de better-sqlite3

class Esquema

new Esquema({obj})

Esta clase recibe un objeto al crearse, el objeto sera el esquema que tendrá la db, las propiedades que pongas aquí serán las que estarán en la db

Véase los tipos, aquí

  • obj.<Propiedad>.type: Incluye el tipo de la propiedad, también puedes usar <Propiedad>: Tipo

  • obj.<Propiedad>.required: Una variable booleana, si se pasa como true se necesitara incluir esa propiedad al insertar algo a la db (default: false)

  • obj.<Propiedad>.default: El valor que tendrá por default la propiedad, si al insertar un dato a la db y tiene esta propiedad se sobrescribirá por el valor ingresado no el default

const personasEsquema = new Esquema({
    nombre: 'string',
    segundoNombre: {
        type: 'string',
        default: 'Doe'
    },
    edad: {
        type: 'number',
        required: true
    }
})

Propiedades

.rawModel -> object - El objeto ingresado

.properties -> string[] - Un array con todas las propiedades del objeto

.values -> string[] - Un array con los valores para SQL de cada propiedad

.types -> string[] - Un objeto de una propiedad, su tipo, si es requerido y si tiene, el valor default

.sentence -> string - Una string con la sentencia para crear la tabla

class DB

new DB(nombre, esquema, client)

Crea una DB nueva, recomiendo mucho no usar esta clase, usen uwuCliente#crearDB

Atención: Cada documento viene con una _id asignada por uwudb, no la modifiquen recomendablemente, pueden ocurrir algunos errores al hacerlo

  • nombre: El nombre de la db (requerido: Si)

  • esquema: El esquema perteneciente a la db (requerido: Si)

  • client: Una clase instanciada de uwuClient

.establecer({obj}) -> ResultadoOperacion

Establece un objeto en la database, obj debe incluir las propiedades de el esquema (no todas), si pusiste en el esquema una propiedad como requerida y no la pones saltara un error, si pusiste un valor por default y pones su valor en el objeto se sobrescribirá el valor default a ese que pusiste en obj

try {
const resultado = personas.establecer({nombre: 'Pedro', edad: 16})
} catch (e) {
    console.log(e)
}

.buscarUno({Búsqueda}) -> Documento

Busca un documento en la db con las propiedades que se hayan ingresado en obj

const resultado = personas.buscarUno({nombre: 'Pedro'})

console.log(resultado)

/*
Documento {
    _id: AGm83242ea891je07ed9M,
    nombre: 'Pedro',
    segundonombre: 'Doe',
    edad: 16
}
*/

.buscar({Búsqueda?}, limite?) -> Documento[]

Busca varios documentos que se encuentren con la Búsqueda si no se pone la Búsqueda se mostraran todos los documentos en esa tabla, el limite es opcional, si no se pone se mostraran todos los docs con esa Búsqueda

personas.establecer({nombre: 'Juana', edad: 18})

const resultado = personas.buscar({segundonombre: 'Doe'})

console.log(resultado)

/*
[
    Documento {
        _id: AGm83242ea891je07ed9M,
        nombre: 'Pedro',
        segundonombre: 'Doe',
        edad: 16
    },
    Documento {
        _id: f2j3Kmag0F27JH1d100c6,
        nombre: 'Juana',
        segundonombre: 'Doe',
        edad: 18
    }
]
*/

.actualizarUno({Búsqueda}, {nuevosDatos}) -> Documento

Actualiza un documento, primero buscándolo y poniendo los nuevos datos a actualizar

personas.establecer({nombre: 'Juana', edad: 18})

const cambios = personas.actualizarUno({nombre: 'Juana'}, {edad: 19})

console.log(cambios)

/*
Documento {
    nombre: 'Juana',
    edad: 19
}
*/

.eliminarUno({Búsqueda}) -> ResultadoOperacion

Elimina un documento que cumpla con la Búsqueda

personas.establecer({nombre: 'Juana', edad: 18})

const eliminar = personas.eliminarVarios({edad: 18})

console.log(eliminar)

/*
{ ok: true, documentos: 1 }
*/

.eliminarVarios({Búsqueda}) -> ResultadoOperacion

Elimina varios documentos que cumplan con la Búsqueda

personas.establecer({nombre: 'Juana', edad: 18})
personas.establecer({nombre: 'Juan', edad: 18})

const eliminar = personas.eliminarVarios({edad: 18})

console.log(eliminar)

/*
{ ok: true, documentos: 2 }
*/

.eliminarPorId(_id) -> ResultadoOperacion

Elimina documentos por la _id asignada por uwudb

personas.eliminarPorId('AGm83242ea891je07ed9M')

const resultado = personas.buscar()

console.log(resultado)

/*
[
    Documento {
        _id: f2j3Kmag0F27JH1d100c6,
        nombre: 'Juana',
        segundonombre: 'Doe',
        edad: 18
    }
]
*/

Propiedades

.Esquema -> new Esquema - El esquema de la db

.nombre -> string - El nombre de la db

class Documento

new Documento(data, db)

Crea un nuevo documento para responder con el en una Búsqueda, recomiendo no instanciar esta clase para otras cosas, esta clase es solo para cosas internas al devolver una Búsqueda

.eliminar() -> ResultadoOperacion

Elimina el documento actual, misma documentacion que Database#eliminarPorId

const resultado = personas.buscarUno({nombre: 'Juana'})

console.log(resultado.eliminar())

.guardar() -> Documento

Guarda los cambios de el documento actual

const resultado = personas.buscarUno({nombre: 'Juana'})

resultado.nombre = 'Juan'

console.log(resultado.guardar())

function validarID

validarID(_id) -> boolean

Valida cualquier _id

console.log(uwudb.Utils.validarID('f2j3Kmag0F27JH1d100c6')) // true

console.log(uwudb.Utils.validarID('uwu')) // false

console.log(uwudb.Utils.validarID('8sjñXag0F27zY1d1u0c6')) // false

function formatArray

formatArray(array) -> any[]

Formatea un array dentro de un string a un array real

const miarray = "['MiElemento']"
const miarrayreal = formatArray(miarray)

console.log(miarrayreal) // ["MiElemento"]

Tipos de Variables en Esquemas

Los tipos validos en el esquema son: string, number, boolean

Soporte

Si quieren que se agrege una nueva funcionalidad o reportar un error mandadme un MD en discord: Vyrek#7545

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published