mirror of
https://github.com/R0m1k3/Regisflow.git
synced 2026-10-11 17:29:48 +02:00
Modify the application to use an in-memory storage solution, replacing the PostgreSQL database connection and data purging logic. This change impacts session management and data operations, introducing a fallback mechanism for when the database is unavailable. Replit-Commit-Author: Agent Replit-Commit-Session-Id: a388004f-01c5-42b1-b1d1-f18daf8bdd0c Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/0715008c-7244-40f4-befc-26c014852236/a388004f-01c5-42b1-b1d1-f18daf8bdd0c/ekgWmFH
95 lines
2.7 KiB
TypeScript
95 lines
2.7 KiB
TypeScript
import { storage } from './storage';
|
|
import cron from 'node-cron';
|
|
|
|
/**
|
|
* Purge des ventes de plus de 19 mois
|
|
* Conformément aux exigences réglementaires de conservation des données
|
|
*/
|
|
export async function purgeSalesData() {
|
|
try {
|
|
// Calculer la date limite (19 mois en arrière)
|
|
const cutoffDate = new Date();
|
|
cutoffDate.setMonth(cutoffDate.getMonth() - 19);
|
|
|
|
console.log(`🗑️ Démarrage purge des ventes antérieures au ${cutoffDate.toLocaleDateString('fr-FR')}`);
|
|
|
|
// Use storage's purge method
|
|
const result = await (storage as any).purgeOldSales();
|
|
const deletedCount = result.deletedCount;
|
|
|
|
if (deletedCount > 0) {
|
|
console.log(`✅ Purge terminée : ${deletedCount} vente(s) supprimée(s)`);
|
|
} else {
|
|
console.log('✅ Purge terminée : aucune vente à supprimer');
|
|
}
|
|
|
|
return {
|
|
success: true,
|
|
deletedCount,
|
|
cutoffDate: cutoffDate.toISOString(),
|
|
message: `${deletedCount} vente(s) supprimée(s) (antérieures au ${cutoffDate.toLocaleDateString('fr-FR')})`
|
|
};
|
|
|
|
} catch (error) {
|
|
console.error('❌ Erreur lors de la purge des ventes:', error);
|
|
return {
|
|
success: false,
|
|
error: error.message || 'Erreur inconnue',
|
|
deletedCount: 0
|
|
};
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Obtenir les statistiques de purge
|
|
*/
|
|
export async function getPurgeStats() {
|
|
try {
|
|
// Use storage's stats method
|
|
const stats = await (storage as any).getPurgeStats();
|
|
|
|
return {
|
|
totalSales: stats.totalSales,
|
|
oldSales: stats.oldSales,
|
|
cutoffDate: stats.cutoffDate,
|
|
purgeEligible: stats.oldSales > 0
|
|
};
|
|
|
|
} catch (error) {
|
|
console.error('❌ Erreur lors du calcul des statistiques de purge:', error);
|
|
return {
|
|
totalSales: 0,
|
|
oldSales: 0,
|
|
cutoffDate: new Date().toISOString(),
|
|
purgeEligible: false,
|
|
error: error.message
|
|
};
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Démarrer le planificateur de purge automatique
|
|
* Exécute la purge tous les 1er du mois à 02:00
|
|
*/
|
|
export function startPurgeScheduler() {
|
|
// Tâche planifiée : tous les 1er du mois à 02:00
|
|
cron.schedule('0 2 1 * *', async () => {
|
|
console.log('🕐 Exécution programmée de la purge des ventes');
|
|
await purgeSalesData();
|
|
}, {
|
|
scheduled: true,
|
|
timezone: 'Europe/Paris'
|
|
});
|
|
|
|
console.log('🕐 Planificateur de purge des ventes démarré');
|
|
console.log('⏰ Purge automatique : 1er de chaque mois à 02:00');
|
|
console.log('📅 Rétention des données : 19 mois maximum');
|
|
}
|
|
|
|
/**
|
|
* Exécuter une purge manuelle (pour l'interface d'administration)
|
|
*/
|
|
export async function executePurgeManually() {
|
|
console.log('🔧 Purge manuelle demandée via l\'interface d\'administration');
|
|
return await purgeSalesData();
|
|
} |