52 lines
1.5 KiB
JavaScript
52 lines
1.5 KiB
JavaScript
/**
|
|
* Acciones base para operaciones CRUD y búsquedas
|
|
*/
|
|
export const actions = {
|
|
/**
|
|
* Inserta o actualiza un registro y devuelve el objeto completo actualizado
|
|
*/
|
|
_set: async (db, { table, view, data }) => {
|
|
// Si el id viene vacío o es 0, lo eliminamos para que MariaDB genere uno nuevo (AUTO_INCREMENT)
|
|
if (!data.id) delete data.id;
|
|
|
|
const result = await db.upsert(table, data);
|
|
|
|
// Normalizamos la respuesta del driver de MariaDB
|
|
const res = Array.isArray(result) ? result[0] : result;
|
|
|
|
// Obtenemos el ID: o bien el que ya venía en data, o el nuevo generado por el insert
|
|
const idToFetch = data.id || res?.insertId;
|
|
|
|
if (!idToFetch) throw new Error("No se pudo determinar el ID del registro");
|
|
|
|
// Devolvemos el registro fresco (útil si usamos una 'view' con campos calculados)
|
|
return db.one(view || table, { id: idToFetch });
|
|
},
|
|
|
|
/**
|
|
* Elimina un registro por ID
|
|
*/
|
|
_del: async (db, { table, id }) => {
|
|
if (!id) throw new Error("ID requerido para eliminar");
|
|
return db.delete(table, { id });
|
|
},
|
|
|
|
/**
|
|
* Obtiene todos los clientes (compatibilidad con ClientesOld)
|
|
*/
|
|
Clientes: async (db) => {
|
|
return db.select('ClientesOld');
|
|
},
|
|
Recibos: async (db) => {
|
|
return db.select('Recibos');
|
|
},
|
|
|
|
/**
|
|
* Búsqueda avanzada usando parámetros nombrados (raw query)
|
|
*/
|
|
Search: async (db, { text }) => {
|
|
const query = 'SELECT * FROM ClientesOld WHERE Cliente LIKE :term OR NIF LIKE :term';
|
|
const params = { term: `%${text}%` };
|
|
return db.raw(query, params);
|
|
}
|
|
}; |