mirror of
https://github.com/R0m1k3/noteflow.git
synced 2026-10-24 07:38:17 +02:00
Feature: Affichage tags et icône priorité dans les cartes notes
Ajout de deux nouvelles fonctionnalités pour les notes: 1. Affichage des tags dans les cartes repliées: - Les tags sont maintenant visibles dans les cartes de notes sans avoir à les ouvrir - Badge avec icône TagIcon et nom du tag - Chargement automatique des tags depuis la base de données 2. Icône de priorité cliquable: - Bouton "!" en haut à droite de chaque carte de note - Rouge (!) quand la note est prioritaire (toujours visible) - Gris clair (!) quand non prioritaire (visible au hover) - Toggle au clic pour marquer/démarquer comme prioritaire - Les notes prioritaires sont triées en premier Backend: - Route PATCH /api/notes/:id/priority pour toggle la priorité - Modification GET /api/notes pour charger tags et priority - Tri par priority DESC, updated_at DESC - Migration automatique pour ajouter colonne priority - Index pour performance des requêtes de tri Frontend: - Interface Note étendue avec tags et priority - Méthode togglePriority dans NotesService - Affichage conditionnel de l'icône (toujours visible si prioritaire) - Empêche le clic sur l'icône d'ouvrir la note (stopPropagation) Migration: - Ajout automatique de la colonne priority (INTEGER DEFAULT 0) - Création d'index idx_notes_priority pour performance - Fichier de migration 002_add_priority.sql créé pour référence
This commit is contained in:
5 files changed
+119
-7
No files matched your search
+36
-3
@@ -49,16 +49,16 @@ router.get('/', async (req, res) => {
|
||||
|
||||
const notes = await getAll(`
|
||||
SELECT
|
||||
n.id, n.title, n.content, n.image_filename, n.archived,
|
||||
n.id, n.title, n.content, n.image_filename, n.archived, n.priority,
|
||||
n.created_at, n.updated_at,
|
||||
(SELECT COUNT(*) FROM note_todos WHERE note_id = n.id) as todos_count,
|
||||
(SELECT COUNT(*) FROM note_todos WHERE note_id = n.id AND completed = 1) as todos_completed
|
||||
FROM notes n
|
||||
WHERE n.user_id = ? AND n.archived = ?
|
||||
ORDER BY n.updated_at DESC
|
||||
ORDER BY n.priority DESC, n.updated_at DESC
|
||||
`, [req.user.id, archivedFilter]);
|
||||
|
||||
// Charger les todos, images et fichiers pour chaque note
|
||||
// Charger les todos, images, fichiers et tags pour chaque note
|
||||
for (const note of notes) {
|
||||
const todos = await getAll(`
|
||||
SELECT id, text, completed, position
|
||||
@@ -84,6 +84,15 @@ router.get('/', async (req, res) => {
|
||||
`, [note.id]);
|
||||
note.files = files || [];
|
||||
note.files_count = files?.length || 0;
|
||||
|
||||
const tags = await getAll(`
|
||||
SELECT t.id, t.name
|
||||
FROM tags t
|
||||
INNER JOIN note_tags nt ON t.id = nt.tag_id
|
||||
WHERE nt.note_id = ?
|
||||
ORDER BY t.name ASC
|
||||
`, [note.id]);
|
||||
note.tags = tags || [];
|
||||
}
|
||||
|
||||
res.json(notes || []);
|
||||
@@ -895,5 +904,29 @@ router.delete('/:noteId/tags/:tagId', async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* PATCH /api/notes/:id/priority
|
||||
* Modifier la priorité d'une note
|
||||
*/
|
||||
router.patch('/:id/priority', async (req, res) => {
|
||||
try {
|
||||
const { priority } = req.body;
|
||||
|
||||
// Vérifier que la note appartient à l'utilisateur
|
||||
const note = await getOne('SELECT id FROM notes WHERE id = ? AND user_id = ?', [req.params.id, req.user.id]);
|
||||
if (!note) {
|
||||
return res.status(404).json({ error: 'Note non trouvée' });
|
||||
}
|
||||
|
||||
await runQuery('UPDATE notes SET priority = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?', [priority ? 1 : 0, req.params.id]);
|
||||
|
||||
logger.info(`Priorité de la note ${req.params.id} modifiée: ${priority}`);
|
||||
res.json({ message: 'Priorité modifiée avec succès', priority });
|
||||
} catch (error) {
|
||||
logger.error('Erreur lors de la modification de la priorité:', error);
|
||||
res.status(500).json({ error: 'Erreur serveur' });
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
module.exports.searchNotes = searchNotes;
|
||||
Reference in new issue
Block a user