Estoy usando node.js para cargar un archivo de Excel en la base de datos, en mi servicio estoy usando bulkCreate para cargar los datos en mysql db. Déjame publicar la estructura de la tabla
table name : customer_details columns: customer_org_id INT, customer_name VARCHAR, customer_type char, active boolean, customer_slot VARCHAR, service_start_time DATE, service_end_time DATETengo un requisito adicional, es decir, si bien cargaré Excel e intentaré insertarlo en la base de datos, debe verificar en la base de datos que customer_org_id &customer_name existe en la base de datos o no. Si la combinación existe, el registro existente se actualizará y la columna activa será falsa. Y se insertará una nueva fila con customer_org_id y customer_name y el activo se establecerá en verdadero. Puedo realizar operaciones individuales como crear, actualizar, eliminar, etc. pero no entiendo dónde poner estas operaciones juntas mientras se hace un bulkCreate. estoy publicando mi codigo
const upload = async(req,res) => { try{ if(req.file == undefined){ return res.status(400).send("Please upload an excel file"); } let path= __basedir + "/resources/static/assets/uploads/" + req.file.filename; readXlsxFile(path).then((rows)=>{ rows.shift(); let custdetail = []; row.forEach((row)=>{ let custdetails ={ customer_org_id: row[0], customer_name :row[1], customer_type :row[2], active :row[3], customer_slot: row[4], }; custdetails.push(custdetail); }); CustomerDetails.bulkCreate(custdetails) .then(()=>{ res.status(200).send({ message: "Uploaded the file successfully :" + req.file.originalname, }); }) .catch((error) =>{ res.status(500).send({ message : "Fail to import data into DB", error : error.message, }); }); }); }catch(error){ console.log(error); res.status(500).send({ message : "Could not upload the file :" +req.file.originalname, }); } }¿Alguien puede decirme cómo puedo hacer las operaciones antes de agregar datos a la base de datos? soy nuevo en nodo js
Si lo entendí correctamente, parece que bulkCreate no es la mejor solución para su problema, ya que deberá realizar una validación y crear/actualizar para cada línea de su matriz.
No entendí todos sus requisitos, pero el código sería algo parecido a esto:
const upload = async (rows) => { const promises = rows.map(async (sindleRow) => { const costumer = await CustomerDetails.find({ where: { customer_org_id: row[0], customer_name: row[1] }}) if (customer !== undefined) { // CUSTOMER FOUND await CustomerDetails.update({ where: { id: customer.id }, data: { active: false }}) await CustomerDetails.create({ data: { customer_org_id: row[0], customer_name: row[1], active: false }}) } return; }); return await Promise.all(promises); }Importante: Este código es solo un ejemplo.
Su escenario no parece beneficiarse del uso de un bulkCreate, porque los datos deben verificarse individualmente.