uploadMotorista:async(req,res)=>{constarquivo=req.file;console.log(arquivo);if(arquivo===undefined){res.status(400).json({error:"Deve selecionar um arquivo !"});}else{if(arquivo.mimetype!=="application/vnd.ms-excel"){res.status(400).json({error:"O arquivo deve ser um CSV !"});}else{letnomesNaoImportados=[];fs.createReadStream(awaitarquivo.path).pipe(csv({delimiter:":"})).on("data",asyncfunction(row){letachou=false;if(row.booking_status==="ACTIVE"){letcpf=String(row.cus_cpf).match(/[\d]+/g).join("");awaitModel.findAll({where:{[Op.And]:Sequelize.where(Sequelize.fn("lower",Sequelize.col("email")),{[Op.eq]:row.cus_mail.toLowerCase()}),},}).then((result)=>{if(result&&result.length>0){achou=true;nomesNaoImportados.push(row.cus_name,(tipo="email"));}});if(!achou){Model.findAll({where:{cpf,},}).then((result)=>{if(result&&result.length>0){achou=true;nomesNaoImportados.push(row[1],(tipo="cpf"));}});if(!achou){letend_numero=0;if(row.cus_streetnum!=="NaN"){end_numero=Number(row.cus_streetnum);}letdata={codigoImportacao:row.cus_mail,nome:row.cus_name,cpf,end_logradouro:row.cus_street,end_numero,end_cep:Number(row.cus_zip),end_cidade:row.cus_city,email:row.cus_mail,tel_celular:row.cus_phone.substring(2),end_uf:"SP",end_pais:"1058",senha:"123456",idc_status:1,idc_termo_aceito:3,idc_equipamento:3,};Model.create(data).then(async(result)=>{logger.info("Motorista.upload :: "+result.email+" : SUCESSO : cd_motorista : "+result.cd_motorista);awaitMotoristaComplementoController.createMotoristaAdmin(result.cd_motorista,req,res);});}}}}).on("end",async()=>{console.log("end1: "+nomesNaoImportados.length);});console.log("end2: "+nomesNaoImportados.length);res.send({upload:true});}}},
Ele importou e salvou a primeira vez.
Na segunda vez, ele não salvou, porque existe o email no banco, assim ele mudou a variável para achou = true;, e preencheu a lista em nomesNaoImportados.push(row.cus_name, (tipo = “email”));
Esse Model.findAll({ está sendo executado de forma assíncrona, ou seja, o IF que tem em seguida if (!achou) { já será executado antes mesmo do then referente ao Model.findAll. Bom, analisando o código, foi o que consegui perceber. Para testar, tu pode colocar um console log dentro do then e antes do IF para ver a ordem em que eles serão apresentados.
Acaba que é uma função assíncrona msm. Capaz que deve ser por isso que a lógica está quebrando.
Para testar tente executar seu código dessa forma:
uploadMotorista:async(req,res)=>{constarquivo=req.file;console.log(arquivo);if(arquivo===undefined){res.status(400).json({error:"Deve selecionar um arquivo !"});}else{if(arquivo.mimetype!=="application/vnd.ms-excel"){res.status(400).json({error:"O arquivo deve ser um CSV !"});}else{letnomesNaoImportados=[];fs.createReadStream(awaitarquivo.path).pipe(csv({delimiter:":"})).on("data",asyncfunction(row){letachou=false;if(row.booking_status==="ACTIVE"){letcpf=String(row.cus_cpf).match(/[\d]+/g).join("");awaitModel.findAll({where:{[Op.And]:Sequelize.where(Sequelize.fn("lower",Sequelize.col("email")),{[Op.eq]:row.cus_mail.toLowerCase()}),},}).then((result)=>{if(result&&result.length>0){achou=true;nomesNaoImportados.push(row.cus_name,(tipo="email"));}if(!achou){Model.findAll({where:{cpf,},}).then((result)=>{if(result&&result.length>0){achou=true;nomesNaoImportados.push(row[1],(tipo="cpf"));}});if(!achou){letend_numero=0;if(row.cus_streetnum!=="NaN"){end_numero=Number(row.cus_streetnum);}letdata={codigoImportacao:row.cus_mail,nome:row.cus_name,cpf,end_logradouro:row.cus_street,end_numero,end_cep:Number(row.cus_zip),end_cidade:row.cus_city,email:row.cus_mail,tel_celular:row.cus_phone.substring(2),end_uf:"SP",end_pais:"1058",senha:"123456",idc_status:1,idc_termo_aceito:3,idc_equipamento:3,};Model.create(data).then(async(result)=>{logger.info("Motorista.upload :: "+result.email+" : SUCESSO : cd_motorista : "+result.cd_motorista);awaitMotoristaComplementoController.createMotoristaAdmin(result.cd_motorista,req,res);});}}});}}).on("end",async()=>{console.log("end1: "+nomesNaoImportados.length);});console.log("end2: "+nomesNaoImportados.length);res.send({upload:true});}}},
A única mudança que fiz foi jogar o bloco do IF para dentro do when do Model.findAll
guilhermebhte
Não funcionou
uploadMotorista:async(req,res)=>{constarquivo=req.file;console.log(arquivo);if(arquivo===undefined){res.status(400).json({error:"Deve selecionar um arquivo !"});}else{if(arquivo.mimetype!=="application/vnd.ms-excel"){res.status(400).json({error:"O arquivo deve ser um CSV !"});}else{letnomesNaoImportados=[];fs.createReadStream(arquivo.path).pipe(csv({delimiter:":"})).on("data",asyncfunction(row){letachou=false;if(row.booking_status==="ACTIVE"){letcpf=String(row.cus_cpf).match(/[\d]+/g).join("");awaitModel.findAll({where:{[Op.And]:Sequelize.where(Sequelize.fn("lower",Sequelize.col("email")),{[Op.eq]:row.cus_mail.toLowerCase()}),},}).then(async(result)=>{if(result&&result.length>0){achou=true;nomesNaoImportados.push(row.cus_name,(tipo="email"));console.log("nomesNaoImportados"+nomesNaoImportados.length);}else{awaitModel.findAll({where:{cpf,},}).then((result)=>{if(result&&result.length>0){achou=true;nomesNaoImportados.push(row[1],(tipo="cpf"));}else{letend_numero=0;if(row.cus_streetnum!=="NaN"){end_numero=Number(row.cus_streetnum);}letdata={codigoImportacao:row.cus_mail,nome:row.cus_name,cpf,end_logradouro:row.cus_street,end_numero,end_cep:Number(row.cus_zip),end_cidade:row.cus_city,email:row.cus_mail,tel_celular:row.cus_phone.substring(2),end_uf:"SP",end_pais:"1058",senha:"Zanzar@2021",idc_status:1,idc_termo_aceito:3,idc_equipamento:3,};Model.create(data).then(async(result)=>{logger.info("Motorista.upload :: "+result.email+" : SUCESSO : cd_motorista : "+result.cd_motorista);awaitMotoristaComplementoController.createMotoristaAdmin(result.cd_motorista,req,res);});}});}});}}).on("end",async()=>{console.log("end1: "+nomesNaoImportados.length);});console.log("end2: "+nomesNaoImportados.length);res.send({upload:true});}},