mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-11 17:27:31 +02:00
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:
1 parent
a25b178ee2
commit
1ccfc740b4
3 files changed
+68
-2
No files matched your search
@@ -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 () => {
|
||||
|
||||
@@ -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
@@ -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,
|
||||
|
||||
Reference in new issue
Block a user