From 6d8a5ae1375770128747568379ccde5148fc74a7 Mon Sep 17 00:00:00 2001 From: Surya Paolo Date: Sat, 17 Feb 2024 16:04:22 +0100 Subject: [PATCH] - FIX: duplicati dei Circuiti e Rimozione ! --- src/server/models/circuit.js | 80 ++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/src/server/models/circuit.js b/src/server/models/circuit.js index 129880d..f890a52 100755 --- a/src/server/models/circuit.js +++ b/src/server/models/circuit.js @@ -1235,6 +1235,8 @@ CircuitSchema.statics.CheckTransazioniCircuiti = async function (correggi) { const { MyGroup } = require('../models/mygroup'); const { SendNotif } = require('../models/sendnotif'); + const idapp = tools.RISO; + try { console.log('--------- INIZIO CONTROLLO CheckTransazioniCircuiti -----------'); @@ -1243,6 +1245,84 @@ CircuitSchema.statics.CheckTransazioniCircuiti = async function (correggi) { else console.log('SOLO VERIFICA'); + + if (correggi) { + // Trova tutti i documenti che contengono circuitname a null nell'array mycircuits + const usersWithNullCircuit = await User.find({ idapp, "profile.mycircuits.circuitname": null }); + + // Itera su ciascun documento + for (const user of usersWithNullCircuit) { + // Rimuove i campi null dall'array mycircuits + user.profile.mycircuits = user.profile.mycircuits.filter(circuit => circuit.circuitname !== null); + + // Salva le modifiche al documento + await User.findOneAndUpdate({ _id: user._id }, { $set: { 'profile.mycircuits': user.profile.mycircuits } }); + + } + } + + + let usersWithDuplicateCircuits = await User.aggregate([ + { + $unwind: "$profile.mycircuits" + }, + { + $group: { + _id: { + userId: "$_id", + username: "$username", + circuitname: "$profile.mycircuits.circuitname" + }, + count: { $sum: 1 } + } + }, + { + $match: { + count: { $gt: 1 } + } + }, + { + $group: { + _id: "$_id.userId", + username: { $first: "$_id.username" }, + duplicatedCircuits: { + $push: "$_id.circuitname" + } + } + } + ]); + + if (usersWithDuplicateCircuits.length > 0) { + console.log("Utenti con circuitname duplicati:"); + usersWithDuplicateCircuits.forEach(user => { + console.log("Username:", user.username); + console.log("Circuiti duplicati:", user.duplicatedCircuits); + }); + + if (correggi) { + // CORREGGI DUPLICATI NEI CIRCUITI ! + for (const user of usersWithDuplicateCircuits) { + // Troviamo l'utente dal suo _id e aggiorniamo il suo documento + const arraycirc = await User.findOne({_id: user._id}).lean(); + + let risdel = await User.updateOne( + { _id: user._id }, + { $pull: { "profile.mycircuits": { circuitname: { $in: user.duplicatedCircuits } } } } + ); + + let risadd = await User.updateOne( + { _id: user._id }, + { $push: { "profile.mycircuits": { $each: user.duplicatedCircuits.map(circuitname => ({ circuitname, date: arraycirc.profile.mycircuits.find((rec) => rec.circuitname === circuitname).date })) } } } + ); + console.log('DEL', risdel, 'risadd', risadd); + } + } + + console.log("*** FINE DUPLICATI *** "); + } else { + console.log("Nessun utente ha circuitname duplicati."); + } + let numtransazionitot = 0; const arrcircuits = await Circuit.find({ idapp }).lean();