feat: overhaul TODO.md and enhance Kanban components
- Updated TODO.md to reflect the new project structure and phases, marking several tasks as completed. - Enhanced Kanban components with a tech-inspired design, including new styles for columns and task cards. - Removed the obsolete reminders service and task processor, streamlining the codebase for better maintainability. - Introduced a modern API for task management, including CRUD operations and improved error handling. - Updated global styles for a cohesive dark theme and added custom scrollbar styles.
This commit is contained in:
87
scripts/reset-database.ts
Normal file
87
scripts/reset-database.ts
Normal file
@@ -0,0 +1,87 @@
|
||||
import { prisma } from '../services/database';
|
||||
|
||||
/**
|
||||
* Script pour reset la base de données et supprimer les anciennes données
|
||||
*/
|
||||
async function resetDatabase() {
|
||||
console.log('🗑️ Reset de la base de données...');
|
||||
console.log('===================================');
|
||||
|
||||
try {
|
||||
// Compter les tâches avant suppression
|
||||
const beforeCount = await prisma.task.count();
|
||||
const manualCount = await prisma.task.count({ where: { source: 'manual' } });
|
||||
const remindersCount = await prisma.task.count({ where: { source: 'reminders' } });
|
||||
|
||||
console.log(`📊 État actuel:`);
|
||||
console.log(` Total: ${beforeCount} tâches`);
|
||||
console.log(` Manuelles: ${manualCount} tâches`);
|
||||
console.log(` Rappels: ${remindersCount} tâches`);
|
||||
console.log('');
|
||||
|
||||
// Supprimer toutes les tâches de synchronisation
|
||||
const deletedTasks = await prisma.task.deleteMany({
|
||||
where: {
|
||||
source: 'reminders'
|
||||
}
|
||||
});
|
||||
|
||||
console.log(`✅ Supprimé ${deletedTasks.count} tâches de synchronisation`);
|
||||
|
||||
// Supprimer les logs de sync
|
||||
const deletedLogs = await prisma.syncLog.deleteMany();
|
||||
console.log(`✅ Supprimé ${deletedLogs.count} logs de synchronisation`);
|
||||
|
||||
// Supprimer les tags orphelins (optionnel)
|
||||
const deletedTags = await prisma.tag.deleteMany();
|
||||
console.log(`✅ Supprimé ${deletedTags.count} tags`);
|
||||
|
||||
// Compter après nettoyage
|
||||
const afterCount = await prisma.task.count();
|
||||
|
||||
console.log('');
|
||||
console.log('🎉 Base de données nettoyée !');
|
||||
console.log(`📊 Résultat: ${afterCount} tâches restantes`);
|
||||
|
||||
// Afficher les tâches restantes
|
||||
if (afterCount > 0) {
|
||||
console.log('');
|
||||
console.log('📋 Tâches restantes:');
|
||||
const remainingTasks = await prisma.task.findMany({
|
||||
orderBy: { createdAt: 'desc' }
|
||||
});
|
||||
|
||||
remainingTasks.forEach((task, index) => {
|
||||
const statusEmoji = {
|
||||
'todo': '⏳',
|
||||
'in_progress': '🔄',
|
||||
'done': '✅',
|
||||
'cancelled': '❌'
|
||||
}[task.status] || '❓';
|
||||
|
||||
const tags = JSON.parse(task.tagsJson || '[]');
|
||||
const tagsStr = tags.length > 0 ? ` [${tags.join(', ')}]` : '';
|
||||
|
||||
console.log(` ${index + 1}. ${statusEmoji} ${task.title}${tagsStr}`);
|
||||
});
|
||||
}
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Erreur lors du reset:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
// Exécuter le script
|
||||
if (require.main === module) {
|
||||
resetDatabase().then(() => {
|
||||
console.log('');
|
||||
console.log('✨ Reset terminé avec succès !');
|
||||
process.exit(0);
|
||||
}).catch((error) => {
|
||||
console.error('💥 Erreur fatale:', error);
|
||||
process.exit(1);
|
||||
});
|
||||
}
|
||||
|
||||
export { resetDatabase };
|
||||
100
scripts/seed-data.ts
Normal file
100
scripts/seed-data.ts
Normal file
@@ -0,0 +1,100 @@
|
||||
import { tasksService } from '../services/tasks';
|
||||
import { TaskStatus, TaskPriority } from '../lib/types';
|
||||
|
||||
/**
|
||||
* Script pour ajouter des données de test avec tags et variété
|
||||
*/
|
||||
async function seedTestData() {
|
||||
console.log('🌱 Ajout de données de test...');
|
||||
console.log('================================');
|
||||
|
||||
const testTasks = [
|
||||
{
|
||||
title: '🎨 Redesign du dashboard',
|
||||
description: 'Créer une interface moderne et intuitive pour le tableau de bord principal',
|
||||
status: 'in_progress' as TaskStatus,
|
||||
priority: 'high' as TaskPriority,
|
||||
tags: ['design', 'ui', 'frontend'],
|
||||
dueDate: new Date('2025-01-20')
|
||||
},
|
||||
{
|
||||
title: '🔧 Optimiser les performances API',
|
||||
description: 'Améliorer les temps de réponse des endpoints et ajouter la pagination',
|
||||
status: 'todo' as TaskStatus,
|
||||
priority: 'medium' as TaskPriority,
|
||||
tags: ['backend', 'performance', 'api'],
|
||||
dueDate: new Date('2025-01-25')
|
||||
},
|
||||
{
|
||||
title: '✅ Tests unitaires composants',
|
||||
description: 'Ajouter des tests Jest/RTL pour les composants principaux',
|
||||
status: 'done' as TaskStatus,
|
||||
priority: 'medium' as TaskPriority,
|
||||
tags: ['testing', 'jest', 'quality'],
|
||||
dueDate: new Date('2025-01-10')
|
||||
}
|
||||
];
|
||||
|
||||
let createdCount = 0;
|
||||
let errorCount = 0;
|
||||
|
||||
for (const taskData of testTasks) {
|
||||
try {
|
||||
const task = await tasksService.createTask(taskData);
|
||||
|
||||
const statusEmoji = {
|
||||
'todo': '⏳',
|
||||
'in_progress': '🔄',
|
||||
'done': '✅',
|
||||
'cancelled': '❌'
|
||||
}[task.status];
|
||||
|
||||
const priorityEmoji = {
|
||||
'low': '🔵',
|
||||
'medium': '🟡',
|
||||
'high': '🔴'
|
||||
}[task.priority];
|
||||
|
||||
console.log(` ${statusEmoji} ${priorityEmoji} ${task.title}`);
|
||||
console.log(` Tags: ${task.tags?.join(', ') || 'aucun'}`);
|
||||
if (task.dueDate) {
|
||||
console.log(` Échéance: ${task.dueDate.toLocaleDateString('fr-FR')}`);
|
||||
}
|
||||
console.log('');
|
||||
|
||||
createdCount++;
|
||||
} catch (error) {
|
||||
console.error(` ❌ Erreur pour "${taskData.title}":`, error instanceof Error ? error.message : error);
|
||||
errorCount++;
|
||||
}
|
||||
}
|
||||
|
||||
console.log('📊 Résumé:');
|
||||
console.log(` ✅ Tâches créées: ${createdCount}`);
|
||||
console.log(` ❌ Erreurs: ${errorCount}`);
|
||||
|
||||
// Afficher les stats finales
|
||||
const stats = await tasksService.getTaskStats();
|
||||
console.log('');
|
||||
console.log('📈 Statistiques finales:');
|
||||
console.log(` Total: ${stats.total} tâches`);
|
||||
console.log(` À faire: ${stats.todo}`);
|
||||
console.log(` En cours: ${stats.inProgress}`);
|
||||
console.log(` Terminées: ${stats.completed}`);
|
||||
console.log(` Annulées: ${stats.cancelled}`);
|
||||
console.log(` Taux de completion: ${stats.completionRate}%`);
|
||||
}
|
||||
|
||||
// Exécuter le script
|
||||
if (require.main === module) {
|
||||
seedTestData().then(() => {
|
||||
console.log('');
|
||||
console.log('✨ Données de test ajoutées avec succès !');
|
||||
process.exit(0);
|
||||
}).catch((error) => {
|
||||
console.error('💥 Erreur fatale:', error);
|
||||
process.exit(1);
|
||||
});
|
||||
}
|
||||
|
||||
export { seedTestData };
|
||||
Reference in New Issue
Block a user