mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-11 17:29:37 +02:00
Implémente un système de marquage de priorité pour les tâches avec une icône étoile cliquable. Fonctionnalités ajoutées : - Champ priority (BOOLEAN) ajouté aux tables global_todos et note_todos - Migration automatique avec script add-priority-field.js - Route API PATCH /api/todos/:id/priority pour basculer la priorité - Icône étoile (Star) dans l'interface frontend - Tri automatique : tâches prioritaires en premier - Index PostgreSQL pour optimiser les performances Comportement de l'icône : - Toujours visible et jaune quand la tâche est prioritaire - Visible au survol (hover) quand la tâche n'est pas prioritaire - Un clic bascule l'état prioritaire/non prioritaire - Affichage discret (opacity 50%) pour les tâches complétées Scripts npm ajoutés : - npm run db:migrate:priority - Exécuter la migration Routes API mises à jour : - GET /api/todos - Inclut le champ priority, tri par priorité - POST /api/todos - Accepte le champ priority - PUT /api/todos/:id - Accepte le champ priority - PATCH /api/todos/:id/priority - Bascule la priorité (nouveau) UI améliorée : - Icône étoile jaune pour les tâches prioritaires - Animation au survol pour les interactions - Tooltip explicatif au survol - Onglets "Actives" et "Complétées" mis à jour
88 lines
3.7 KiB
JavaScript
88 lines
3.7 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Script de migration pour ajouter le champ priority aux tâches
|
|
* - priority (BOOLEAN) pour global_todos
|
|
* - priority (BOOLEAN) pour note_todos
|
|
*/
|
|
|
|
const { Pool } = require('pg');
|
|
|
|
const DATABASE_URL = process.env.DATABASE_URL ||
|
|
`postgresql://${process.env.PGUSER || 'noteflow'}:${process.env.PGPASSWORD || 'noteflow_secure_password_change_me'}@${process.env.PGHOST || 'postgres'}:${process.env.PGPORT || '5499'}/${process.env.PGDATABASE || 'noteflow'}`;
|
|
|
|
async function migrate() {
|
|
const pool = new Pool({ connectionString: DATABASE_URL });
|
|
|
|
try {
|
|
console.log('\n╔════════════════════════════════════════════════════════════╗');
|
|
console.log('║ MIGRATION: Ajout du champ priority aux tâches ║');
|
|
console.log('╚════════════════════════════════════════════════════════════╝\n');
|
|
|
|
const client = await pool.connect();
|
|
|
|
try {
|
|
await client.query('BEGIN');
|
|
|
|
// 1. Ajouter priority à la table global_todos
|
|
console.log('📝 Ajout du champ priority à la table global_todos...');
|
|
await client.query(`
|
|
ALTER TABLE global_todos
|
|
ADD COLUMN IF NOT EXISTS priority BOOLEAN DEFAULT FALSE
|
|
`);
|
|
console.log('✅ Champ priority ajouté à global_todos\n');
|
|
|
|
// 2. Ajouter priority à la table note_todos
|
|
console.log('📝 Ajout du champ priority à la table note_todos...');
|
|
await client.query(`
|
|
ALTER TABLE note_todos
|
|
ADD COLUMN IF NOT EXISTS priority BOOLEAN DEFAULT FALSE
|
|
`);
|
|
console.log('✅ Champ priority ajouté à note_todos\n');
|
|
|
|
// 3. Créer un index pour améliorer les performances de tri par priorité
|
|
console.log('🔧 Création des index pour les tâches prioritaires...');
|
|
await client.query(`
|
|
CREATE INDEX IF NOT EXISTS idx_global_todos_priority
|
|
ON global_todos(priority DESC, created_at DESC)
|
|
`);
|
|
await client.query(`
|
|
CREATE INDEX IF NOT EXISTS idx_note_todos_priority
|
|
ON note_todos(priority DESC, position)
|
|
`);
|
|
console.log('✅ Index créés avec succès\n');
|
|
|
|
await client.query('COMMIT');
|
|
|
|
console.log('╔════════════════════════════════════════════════════════════╗');
|
|
console.log('║ ✅ MIGRATION TERMINÉE AVEC SUCCÈS ║');
|
|
console.log('╚════════════════════════════════════════════════════════════╝\n');
|
|
|
|
console.log('📝 RÉSUMÉ DES CHANGEMENTS:\n');
|
|
console.log('• Champ priority (BOOLEAN) ajouté à global_todos');
|
|
console.log('• Champ priority (BOOLEAN) ajouté à note_todos');
|
|
console.log('• Index créés pour optimiser le tri par priorité');
|
|
console.log('• Valeur par défaut: FALSE (non prioritaire)\n');
|
|
|
|
console.log('💡 UTILISATION:\n');
|
|
console.log('Les tâches peuvent maintenant être marquées comme prioritaires');
|
|
console.log('avec une étoile dans l\'interface.\n');
|
|
|
|
} catch (error) {
|
|
await client.query('ROLLBACK');
|
|
throw error;
|
|
} finally {
|
|
client.release();
|
|
}
|
|
|
|
await pool.end();
|
|
|
|
} catch (error) {
|
|
console.error('\n❌ Erreur:', error.message);
|
|
console.error(error.stack);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
migrate();
|