/** * 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); } };