mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-23 23:28:17 +02:00
Feat: Ajout de l'icône de priorité pour les tâches
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
This commit is contained in:
6 files changed
+160
-8
No files matched your search
+35
-4
@@ -17,10 +17,10 @@ router.use(authenticateToken);
|
||||
router.get('/', async (req, res) => {
|
||||
try {
|
||||
const todos = await getAll(`
|
||||
SELECT id, text, completed, created_at
|
||||
SELECT id, text, completed, priority, created_at
|
||||
FROM global_todos
|
||||
WHERE user_id = $1
|
||||
ORDER BY created_at DESC
|
||||
ORDER BY priority DESC, created_at DESC
|
||||
`, [req.user.id]);
|
||||
|
||||
res.json(todos);
|
||||
@@ -59,6 +59,7 @@ router.post('/',
|
||||
id: result.id,
|
||||
text,
|
||||
completed: false,
|
||||
priority: false,
|
||||
created_at: new Date().toISOString()
|
||||
});
|
||||
} catch (error) {
|
||||
@@ -75,7 +76,8 @@ router.post('/',
|
||||
router.put('/:id',
|
||||
[
|
||||
body('text').optional().trim().notEmpty(),
|
||||
body('completed').optional().isBoolean()
|
||||
body('completed').optional().isBoolean(),
|
||||
body('priority').optional().isBoolean()
|
||||
],
|
||||
async (req, res) => {
|
||||
try {
|
||||
@@ -84,7 +86,7 @@ router.put('/:id',
|
||||
return res.status(400).json({ error: 'Données invalides', details: errors.array() });
|
||||
}
|
||||
|
||||
const { text, completed } = req.body;
|
||||
const { text, completed, priority } = req.body;
|
||||
|
||||
// Vérifier que le todo appartient à l'utilisateur
|
||||
const todo = await getOne('SELECT id FROM global_todos WHERE id = $1 AND user_id = $2', [req.params.id, req.user.id]);
|
||||
@@ -106,6 +108,11 @@ router.put('/:id',
|
||||
updates.push(`completed = $${paramCount}`);
|
||||
params.push(completed ? 1 : 0);
|
||||
}
|
||||
if (priority !== undefined) {
|
||||
paramCount++;
|
||||
updates.push(`priority = $${paramCount}`);
|
||||
params.push(priority ? 1 : 0);
|
||||
}
|
||||
|
||||
if (updates.length > 0) {
|
||||
paramCount++;
|
||||
@@ -145,6 +152,30 @@ router.patch('/:id/toggle', async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* PATCH /api/todos/:id/priority
|
||||
* Basculer l'état priority d'un todo
|
||||
*/
|
||||
router.patch('/:id/priority', async (req, res) => {
|
||||
try {
|
||||
// Vérifier que le todo appartient à l'utilisateur
|
||||
const todo = await getOne('SELECT id, priority FROM global_todos WHERE id = $1 AND user_id = $2', [req.params.id, req.user.id]);
|
||||
if (!todo) {
|
||||
return res.status(404).json({ error: 'Todo non trouvé' });
|
||||
}
|
||||
|
||||
const newPriority = todo.priority ? 0 : 1;
|
||||
await runQuery('UPDATE global_todos SET priority = $1 WHERE id = $2', [newPriority, req.params.id]);
|
||||
|
||||
logger.info(`Todo global ${newPriority ? 'marqué prioritaire' : 'démarqué prioritaire'} (ID: ${req.params.id}) par ${req.user.username}`);
|
||||
|
||||
res.json({ message: 'Priorité modifiée avec succès', priority: newPriority === 1 });
|
||||
} catch (error) {
|
||||
logger.error('Erreur lors du toggle de la priorité:', error);
|
||||
res.status(500).json({ error: 'Erreur serveur' });
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* DELETE /api/todos/:id
|
||||
* Supprimer un todo global
|
||||
|
||||
Reference in new issue
Block a user