Improve task management by handling date errors and ensuring data integrity

Implement robust error handling and data validation for task dates and properties in both frontend and backend to resolve production issues.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: cc2d271b-82f0-4d6a-9302-a0b067ffb429
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/cc2d271b-82f0-4d6a-9302-a0b067ffb429/0taewQN
This commit is contained in:
michaelschal committed 2025-08-19 07:39:33 +00:00
1 parent aa1906a9bb
commit 0d863da97e
7 files changed
+765 -56

No files matched your search

+44 -6
View File
@@ -1619,12 +1619,50 @@ export class DatabaseStorage implements IStorage {
}
const results = await query.orderBy(desc(tasks.createdAt));
return results.map((row: any) => ({
...row.task,
group: row.group,
// Ajouter le statut "future" pour les tâches futures (admin/directeur)
isFutureTask: row.task.startDate && new Date(row.task.startDate) > today
}));
console.log('📋 DatabaseStorage.getTasks - Raw results:', {
resultCount: results.length,
userRole,
sampleTasks: results.slice(0, 2).map(r => ({
taskExists: !!r.task,
taskId: r.task?.id,
title: r.task?.title,
startDate: r.task?.startDate,
groupExists: !!r.group
}))
});
return results
.filter((row: any) => row.task) // Filtrer les tâches nulles
.map((row: any) => {
try {
const task = row.task;
const group = row.group || null;
// Calculer si la tâche est future de manière sécurisée
let isFutureTask = false;
if (task.startDate) {
try {
const startDate = new Date(task.startDate);
if (!isNaN(startDate.getTime())) {
isFutureTask = startDate > today;
}
} catch (error) {
console.warn('Error parsing startDate:', error, task.startDate);
}
}
return {
...task,
group,
isFutureTask
};
} catch (error) {
console.error('Error processing task row:', error, row);
return null;
}
})
.filter(Boolean);
}
async getTask(id: number): Promise<TaskWithRelations | undefined> {