Ensure daily automatic backups are performed upon user login

Introduce a daily automatic backup check and execution triggered upon successful user login, ensuring data consistency and safety across the platform. This includes a new `checkAndPerformDailyBackup` method in `backupService.ts` and its integration into the login process in `localAuth.ts` and `localAuth.production.ts`.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 8e57b9d9-f2b2-427d-ba7a-757427e9b079
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/8e57b9d9-f2b2-427d-ba7a-757427e9b079/BLTvIk5
This commit is contained in:
michaelschal committed 2025-09-02 17:54:11 +00:00
1 parent a25b178ee2
commit 1ccfc740b4
3 files changed
+68 -2

No files matched your search

+40
View File
@@ -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 () => {
+14 -1
View File
@@ -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,
+14 -1
View File
@@ -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,