diff --git a/server/backupService.ts b/server/backupService.ts index 2d37d8d..3a02fc6 100644 --- a/server/backupService.ts +++ b/server/backupService.ts @@ -211,6 +211,46 @@ export class BackupService { return Math.round(bytes / Math.pow(1024, i) * 100) / 100 + ' ' + sizes[i]; } + // Nouvelle méthode : Vérifier et effectuer une sauvegarde quotidienne si nécessaire + async checkAndPerformDailyBackup(userId: string = 'system'): Promise<{ backupPerformed: boolean; message: string }> { + try { + const today = new Date().toISOString().split('T')[0]; // Format YYYY-MM-DD + + // Vérifier s'il y a déjà une sauvegarde automatique aujourd'hui + const existingBackupToday = await db.select() + .from(databaseBackups) + .where(eq(databaseBackups.backupType, 'automatic')) + .orderBy(desc(databaseBackups.createdAt)) + .limit(1); + + const lastBackup = existingBackupToday[0]; + const lastBackupDate = lastBackup ? lastBackup.createdAt.toISOString().split('T')[0] : null; + + // Si aucune sauvegarde automatique aujourd'hui, en créer une + if (lastBackupDate !== today) { + console.log('🔄 Première connexion du jour - Création de la sauvegarde automatique...'); + await this.createBackup('automatic', userId); + console.log('✅ Sauvegarde quotidienne effectuée avec succès'); + return { + backupPerformed: true, + message: 'Sauvegarde quotidienne effectuée avec succès' + }; + } else { + console.log('ℹ️ Sauvegarde quotidienne déjà effectuée aujourd\'hui'); + return { + backupPerformed: false, + message: 'Sauvegarde quotidienne déjà effectuée aujourd\'hui' + }; + } + } catch (error) { + console.error('❌ Erreur lors de la vérification de sauvegarde quotidienne:', error); + return { + backupPerformed: false, + message: `Erreur: ${error instanceof Error ? error.message : 'Erreur inconnue'}` + }; + } + } + private scheduleAutomaticBackup(): void { // Check for automatic backup every hour const checkBackupNeeded = async () => { diff --git a/server/localAuth.production.ts b/server/localAuth.production.ts index d00ecef..7afa4b6 100644 --- a/server/localAuth.production.ts +++ b/server/localAuth.production.ts @@ -6,6 +6,7 @@ import { storage } from "./storage.js"; import connectPg from "connect-pg-simple"; import { scrypt, randomBytes, timingSafeEqual } from "crypto"; import { promisify } from "util"; +import { backupService } from "./backupService.js"; const scryptAsync = promisify(scrypt); @@ -206,8 +207,20 @@ export function setupLocalAuth(app: Express) { return res.status(400).json({ message: info?.message || "Invalid credentials" }); } - req.login(user, (err) => { + req.login(user, async (err) => { if (err) return next(err); + + // Vérifier et effectuer une sauvegarde quotidienne si nécessaire + try { + const backupResult = await backupService.checkAndPerformDailyBackup(user.id); + if (backupResult.backupPerformed) { + console.log('💾 Sauvegarde quotidienne effectuée lors de la connexion de', user.username); + } + } catch (error) { + console.error('⚠️ Erreur lors de la vérification de sauvegarde:', error); + // Ne pas faire échouer la connexion si la sauvegarde échoue + } + res.json({ id: user.id, username: user.username, diff --git a/server/localAuth.ts b/server/localAuth.ts index 69f4aa1..ca83906 100644 --- a/server/localAuth.ts +++ b/server/localAuth.ts @@ -7,6 +7,7 @@ import { promisify } from "util"; import { storage } from "./storage"; import { User as SelectUser } from "@shared/schema"; import connectPg from "connect-pg-simple"; +import { backupService } from "./backupService"; declare global { namespace Express { @@ -156,8 +157,20 @@ export function setupLocalAuth(app: Express) { return res.status(400).json({ message: info?.message || "Invalid credentials" }); } - req.login(user, (err) => { + req.login(user, async (err) => { if (err) return next(err); + + // Vérifier et effectuer une sauvegarde quotidienne si nécessaire + try { + const backupResult = await backupService.checkAndPerformDailyBackup(user.id); + if (backupResult.backupPerformed) { + console.log('💾 Sauvegarde quotidienne effectuée lors de la connexion de', user.username); + } + } catch (error) { + console.error('⚠️ Erreur lors de la vérification de sauvegarde:', error); + // Ne pas faire échouer la connexion si la sauvegarde échoue + } + res.json({ id: user.id, username: user.username,