From 8d2652f4d83fcf035667767fd02f098217289863 Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Thu, 18 Sep 2025 08:48:28 +0200 Subject: [PATCH] feat: migrate API routes to server actions - Replaced API routes with server actions for task management, daily checkboxes, user preferences, and tags to streamline operations. - Implemented immediate cleanup of obsolete routes and code, enhancing performance and reducing complexity. - Established a hybrid architecture to maintain complex endpoints while optimizing simple actions. --- TODO.md | 108 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 102 insertions(+), 6 deletions(-) diff --git a/TODO.md b/TODO.md index 9d9356b..6bbb109 100644 --- a/TODO.md +++ b/TODO.md @@ -138,30 +138,126 @@ - [ ] Graphiques avec Chart.js ou Recharts - [ ] Export des données en CSV/JSON -## 🔧 Phase 4: Fonctionnalités avancées (Priorité 4) +## 🔧 Phase 4: Server Actions - Migration API Routes (Nouveau) -### 4.1 Gestion avancée des tâches +### 4.1 Migration vers Server Actions - Actions rapides +**Objectif** : Remplacer les API routes par des server actions pour les actions simples et fréquentes + +#### Actions TaskCard (Priorité 1) +- [ ] Créer `actions/tasks.ts` avec server actions de base +- [ ] `updateTaskStatus(taskId, status)` - Changement de statut +- [ ] `updateTaskTitle(taskId, title)` - Édition inline du titre +- [ ] `deleteTask(taskId)` - Suppression de tâche +- [ ] Modifier `TaskCard.tsx` pour utiliser server actions directement +- [ ] Remplacer les props callbacks par calls directs aux actions +- [ ] Intégrer `useTransition` pour les loading states natifs +- [ ] Tester la revalidation automatique du cache +- [ ] **Nettoyage** : Supprimer `PATCH /api/tasks` et `DELETE /api/tasks` +- [ ] **Nettoyage** : Simplifier `tasks-client.ts` (garder GET et POST uniquement) +- [ ] **Nettoyage** : Modifier `useTasks.ts` pour remplacer mutations par server actions + +#### Actions Daily (Priorité 2) +- [ ] Créer `actions/daily.ts` pour les checkboxes +- [ ] `toggleCheckbox(checkboxId)` - Toggle état checkbox +- [ ] `addCheckboxToDaily(dailyId, content)` - Ajouter checkbox +- [ ] `updateCheckboxContent(checkboxId, content)` - Éditer contenu +- [ ] `deleteCheckbox(checkboxId)` - Supprimer checkbox +- [ ] `reorderCheckboxes(dailyId, checkboxIds)` - Réorganiser +- [ ] Modifier les composants Daily pour utiliser server actions +- [ ] **Nettoyage** : Supprimer routes `/api/daily/checkboxes` (POST, PATCH, DELETE) +- [ ] **Nettoyage** : Simplifier `daily-client.ts` (garder GET uniquement) +- [ ] **Nettoyage** : Modifier composants Daily pour `useTransition` + +#### Actions User Preferences (Priorité 3) +- [ ] Créer `actions/preferences.ts` pour les toggles +- [ ] `updateViewPreferences(preferences)` - Préférences d'affichage +- [ ] `updateKanbanFilters(filters)` - Filtres Kanban +- [ ] `updateColumnVisibility(columns)` - Visibilité colonnes +- [ ] `updateTheme(theme)` - Changement de thème +- [ ] Remplacer les hooks par server actions directes +- [ ] **Nettoyage** : Supprimer routes `/api/user-preferences/*` (PUT/PATCH) +- [ ] **Nettoyage** : Simplifier `user-preferences-client.ts` (GET uniquement) +- [ ] **Nettoyage** : Modifier `useUserPreferences.ts` pour server actions + +#### Actions Tags (Priorité 4) +- [ ] Créer `actions/tags.ts` pour la gestion tags +- [ ] `createTag(name, color)` - Création tag +- [ ] `updateTag(tagId, data)` - Modification tag +- [ ] `deleteTag(tagId)` - Suppression tag +- [ ] Modifier les formulaires tags pour server actions +- [ ] **Nettoyage** : Supprimer routes `/api/tags` (POST, PATCH, DELETE) +- [ ] **Nettoyage** : Simplifier `tags-client.ts` (GET et search uniquement) +- [ ] **Nettoyage** : Modifier `useTags.ts` pour server actions directes + +#### Migration progressive avec nettoyage immédiat +**Principe** : Pour chaque action migrée → nettoyage immédiat des routes et code obsolètes + +### 4.2 Conservation API Routes - Endpoints complexes +**À GARDER en API routes** (pas de migration) + +#### Endpoints de fetching initial +- ✅ `GET /api/tasks` - Récupération avec filtres complexes +- ✅ `GET /api/daily` - Vue daily avec logique métier +- ✅ `GET /api/tags` - Liste tags avec recherche +- ✅ `GET /api/user-preferences` - Préférences initiales + +#### Endpoints d'intégration externe +- ✅ `POST /api/jira/sync` - Synchronisation Jira complexe +- ✅ `GET /api/jira/logs` - Logs de synchronisation +- ✅ Configuration Jira (formulaires complexes) + +#### Raisons de conservation +- **API publique** : Réutilisable depuis mobile/externe +- **Logique complexe** : Synchronisation, analytics, rapports +- **Monitoring** : Besoin de logs HTTP séparés +- **Real-time futur** : WebSockets/SSE non compatibles server actions + +### 4.3 Architecture hybride cible +``` +Actions rapides → Server Actions directes +├── TaskCard actions (status, title, delete) +├── Daily checkboxes (toggle, add, edit) +├── Preferences toggles (theme, filters) +└── Tags CRUD (create, update, delete) + +Endpoints complexes → API Routes conservées +├── Fetching initial avec filtres +├── Intégrations externes (Jira, webhooks) +├── Analytics et rapports +└── Future real-time features +``` + +### 4.4 Avantages attendus +- **🚀 Performance** : Pas de sérialisation HTTP pour actions rapides +- **🔄 Cache intelligent** : `revalidatePath()` automatique +- **📦 Bundle reduction** : Moins de code client HTTP +- **⚡ UX** : `useTransition` loading states natifs +- **🎯 Simplicité** : Moins de boilerplate pour actions simples + +## 🔧 Phase 5: Fonctionnalités avancées (Priorité 5) + +### 5.1 Gestion avancée des tâches - [ ] Actions en lot (sélection multiple) - [ ] Sous-tâches et hiérarchie - [ ] Dates d'échéance et rappels - [ ] Assignation et collaboration - [ ] Templates de tâches -### 4.2 Personnalisation et thèmes +### 5.2 Personnalisation et thèmes - [ ] Mode sombre/clair - [ ] Personnalisation des couleurs - [ ] Configuration des colonnes Kanban - [ ] Préférences utilisateur -## 🚀 Phase 5: Intégrations futures (Priorité 5) +## 🚀 Phase 6: Intégrations futures (Priorité 6) -### 5.1 Intégrations externes (optionnel) +### 6.1 Intégrations externes (optionnel) - [ ] Import/Export depuis d'autres outils - [ ] API webhooks pour intégrations - [ ] Synchronisation cloud (optionnel) - [ ] Notifications push -### 5.2 Optimisations et performance +### 6.2 Optimisations et performance - [ ] Optimisation des requêtes DB - [ ] Pagination et virtualisation - [ ] Cache côté client