Untitled

mail@pastecode.io avatar
unknown
javascript
2 years ago
1.9 kB
4
Indexable
Never
const db = require("../../db_knex");
const tables = require('consts/tables')
const attributeTable = tables.TABLA_ATTRB;
const attributeValueTable = tables.TABLA_ATTRB_VALOR;

const getItems = (whereParam) =>
  db(`${attributeTable} as ca`)
    .join(`${attributeValueTable} as cv`, "ca.id", "cv.id_atributo")
    .where(whereParam)
    .select(
      "ca.id as ID_attrb",
      "ca.nombre as attrb_name",
      "ca.habilitado as attrb_enable",
      "cv.id as ID_value",
      "cv.valor as attrb_value"
    );

const def = { "ca.eliminado": false, "cv.eliminado": false };

const getList = () => getItems(def);

const getSingle = (id) => getItems({ ...def, "ca.id": id });

const addTrx = async (trx, name, values, enable) => {
  const [id] = await trx(attributeTable).insert({
    nombre: name,
    habilitado: enable,
  });
  const insertValues = values.map((v) => ({ id_atributo: id, valor: v }));
  const inserts = await trx(attributeValueTable).insert(insertValues);
  console.log(`${inserts.length} new attributes values saved.`);
  return inserts;
};

const addAttribute = async (name, values, enable) => {
  try {
    return await db.transaction((trx) => addTrx(trx, name, values, enable));
  } catch (error) {
    console.error(error);
    return { error: "Se produjo un error en el alta" };
  }
};

const updateItem = (id, params, table) =>
  db(table).where({ id, eliminado: false }).update(params);

const modifyAttribute = (data, id, isValue) =>
  updateItem(id, data, isValue ? attributeValueTable : attributeTable);

const addValue = (valor, id) =>
  db(attributeValueTable).insert({ valor, id_atributo: id });

const remove = (id, isValue) =>
  updateItem(
    id,
    { eliminado: true },
    isValue ? attributeValueTable : attributeTable
  );

module.exports = {
  getList,
  getSingle,
  addAttribute,
  modifyAttribute,
  remove,
  addValue,
};