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.
This commit is contained in:
Julien Froidefond
2025-09-18 08:48:28 +02:00
parent 0223611b3f
commit 8d2652f4d8

108
TODO.md
View File

@@ -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