fastcheck/server/verify-admin-creditoperations-usage.cjs
2026-04-08 13:58:46 -04:00

121 lines
5.1 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const { MongoClient } = require('mongodb');
// Connessione al database
const uri = 'mongodb://localhost:27017/dux2';
async function verifyAdminCreditOperationsUsage() {
const client = new MongoClient(uri);
try {
await client.connect();
console.log('✅ Connesso al database duxiter');
const db = client.db('duxiter');
console.log('\n🔍 VERIFICA: Utilizzo della collection creditoperations nel pannello SuperAdmin\n');
// 1. Simulare le query che fa il controller getTenantStatistics
console.log('1⃣ Query principale per le statistiche delle valutazioni:');
console.log(' Query: CreditOperation.find({ operationType: "evaluation", creditsChanged: { $lt: 0 } })');
const evaluationOperations = await db.collection('creditoperations').find({
operationType: 'evaluation',
creditsChanged: { $lt: 0 }
}).toArray();
console.log(` Risultato: ${evaluationOperations.length} operazioni di valutazione trovate`);
// 2. Aggregazione per statistiche per tenant
console.log('\n2⃣ Aggregazione per statistiche per tenant:');
console.log(' Query: CreditOperation.aggregate([...])');
const tenantEvaluationStats = await db.collection('creditoperations').aggregate([
{
$match: {
operationType: 'evaluation',
creditsChanged: { $lt: 0 }
}
},
{
$group: {
_id: '$tenantId',
evaluationsUsed: { $sum: 1 },
lastEvaluationDate: { $max: '$createdAt' }
}
}
]).toArray();
console.log(` Risultato: ${tenantEvaluationStats.length} tenant con valutazioni`);
// 3. Mostrare i dati che vengono utilizzati nel pannello admin
console.log('\n3⃣ Dati utilizzati nel pannello SuperAdmin:');
const totalEvaluationsUsed = evaluationOperations.length;
console.log(` • Total Evaluations Used: ${totalEvaluationsUsed}`);
const activeTenants = tenantEvaluationStats.length;
console.log(` • Active Tenants: ${activeTenants}`);
// Distribuzione dell'utilizzo basata su creditoperations
const usageDistribution = {
heavy: tenantEvaluationStats.filter(stat => stat.evaluationsUsed > 50).length,
moderate: tenantEvaluationStats.filter(stat => stat.evaluationsUsed > 10 && stat.evaluationsUsed <= 50).length,
light: tenantEvaluationStats.filter(stat => stat.evaluationsUsed > 0 && stat.evaluationsUsed <= 10).length,
inactive: 0 // Calcolato come totalTenants - activeTenants
};
console.log(' • Usage Distribution (basata su creditoperations):');
console.log(` - Heavy users (>50): ${usageDistribution.heavy}`);
console.log(` - Moderate users (10-50): ${usageDistribution.moderate}`);
console.log(` - Light users (1-10): ${usageDistribution.light}`);
// Top tenants basati su creditoperations
const topTenants = tenantEvaluationStats
.sort((a, b) => b.evaluationsUsed - a.evaluationsUsed)
.slice(0, 5);
console.log('\n • Top 5 Tenants (basati su creditoperations):');
for (const tenant of topTenants) {
console.log(` - Tenant ${tenant._id}: ${tenant.evaluationsUsed} valutazioni`);
}
// 4. Confronto con altre collections
console.log('\n4⃣ Confronto con altre collections:');
const evaluationJobsCount = await db.collection('evaluationjobs').countDocuments({});
const resultsCount = await db.collection('results').countDocuments({});
const summariesCount = await db.collection('summaries').countDocuments({});
console.log(` • EvaluationJobs: ${evaluationJobsCount} record`);
console.log(` • Results: ${resultsCount} record`);
console.log(` • Summaries: ${summariesCount} record`);
console.log(` • CreditOperations (evaluations): ${evaluationOperations.length} record`);
// 5. Verifica coerenza
console.log('\n5⃣ Verifica coerenza:');
if (evaluationOperations.length === evaluationJobsCount) {
console.log(' ✅ Coerenza perfetta: CreditOperations = EvaluationJobs');
} else {
console.log(` ⚠️ Discrepanza: CreditOperations (${evaluationOperations.length}) ≠ EvaluationJobs (${evaluationJobsCount})`);
}
console.log('\n📊 CONCLUSIONE:');
console.log(' Il pannello SuperAdmin utilizza PRINCIPALMENTE la collection "creditoperations"');
console.log(' per calcolare le statistiche delle valutazioni, inclusi:');
console.log(' • Numero totale di valutazioni utilizzate');
console.log(' • Tenant attivi (quelli con almeno una valutazione)');
console.log(' • Distribuzione dell\'utilizzo (heavy/moderate/light users)');
console.log(' • Top tenant per utilizzo');
console.log(' • Data dell\'ultima valutazione per tenant');
console.log('\n Questo conferma che il sistema di tracking dei crediti è la fonte');
console.log(' primaria per le statistiche mostrate nel pannello admin.');
} catch (error) {
console.error('❌ Errore:', error);
} finally {
await client.close();
}
}
verifyAdminCreditOperationsUsage();