- Added `PendingTasksSection` to `DailyPageClient` for displaying uncompleted tasks. - Implemented `getPendingCheckboxes` method in `DailyClient` and `DailyService` to fetch pending tasks. - Introduced `getDaysAgo` utility function for calculating elapsed days since a date. - Updated `TODO.md` to reflect the new task management features and adjustments. - Cleaned up and organized folder structure to align with Next.js 13+ best practices.
18 KiB
18 KiB
TowerControl v2.0 - Gestionnaire de tâches moderne
✅ Phase 1: Nettoyage et architecture (TERMINÉ)
1.1 Configuration projet Next.js
- Initialiser Next.js avec TypeScript
- Configurer ESLint, Prettier
- Setup structure de dossiers selon les règles du workspace
- Configurer base de données (SQLite local)
- Setup Prisma ORM
1.2 Architecture backend standalone
- Créer
services/database.ts- Pool de connexion DB - Créer
services/tasks.ts- Service CRUD pour les tâches - Créer
lib/types.ts- Types partagés (Task, Tag, etc.) - Nettoyer l'ancien code de synchronisation
1.3 API moderne et propre
app/api/tasks/route.ts- API CRUD complète (GET, POST, PATCH, DELETE)- Supprimer les routes de synchronisation obsolètes
- Configuration moderne dans
lib/config.ts
Architecture finale : App standalone avec backend propre et API REST moderne
🎯 Phase 2: Interface utilisateur moderne (EN COURS)
2.1 Système de design et composants UI
- Créer les composants UI de base (Button, Input, Card, Modal, Badge)
- Implémenter le système de design tech dark (couleurs, typographie, spacing)
- Setup Tailwind CSS avec classes utilitaires personnalisées
- Créer une palette de couleurs tech/cyberpunk
2.2 Composants Kanban existants (à améliorer)
components/kanban/Board.tsx- Tableau Kanban principalcomponents/kanban/Column.tsx- Colonnes du Kanbancomponents/kanban/TaskCard.tsx- Cartes de tâchescomponents/ui/Header.tsx- Header avec statistiques- Refactoriser les composants pour utiliser le nouveau système UI
2.3 Gestion des tâches (CRUD)
- Formulaire de création de tâche (Modal + Form)
- Création rapide inline dans les colonnes (QuickAddTask)
- Formulaire d'édition de tâche (Modal + Form avec pré-remplissage)
- Édition inline du titre des tâches (clic sur titre → input)
- Suppression de tâche (icône discrète + API call)
- Changement de statut par drag & drop (@dnd-kit)
- Validation des formulaires et gestion d'erreurs
2.4 Gestion des tags
- Créer/éditer des tags avec sélecteur de couleur
- Autocomplete pour les tags existants
- Suppression de tags (avec vérification des dépendances)
- Affichage des tags avec couleurs personnalisées
- Service tags avec CRUD complet (Prisma)
- API routes /api/tags avec validation
- Client HTTP et hook useTags
- Composants UI (TagInput, TagDisplay, TagForm)
- Intégration dans les formulaires (TagInput avec autocomplete)
- Intégration dans les TaskCards (TagDisplay avec couleurs)
- Contexte global pour partager les tags
- Page de gestion des tags (/tags) avec interface complète
- Navigation dans le Header (Kanban ↔ Tags)
- Filtrage par tags (intégration dans Kanban)
- Interface de filtrage complète (recherche, priorités, tags)
- Logique de filtrage temps réel dans le contexte
- Intégration des filtres dans KanbanBoard
2.5 Clients HTTP et hooks
clients/tasks-client.ts- Client pour les tâches (CRUD complet)clients/tags-client.ts- Client pour les tagsclients/base/http-client.ts- Client HTTP de basehooks/useTasks.ts- Hook pour la gestion des tâches (CRUD complet)hooks/useTags.ts- Hook pour la gestion des tags- Drag & drop avec @dnd-kit (intégré directement dans Board.tsx)
- Gestion des erreurs et loading states
- Architecture SSR + hydratation client optimisée
2.6 Fonctionnalités Kanban avancées
- Drag & drop entre colonnes (@dnd-kit avec React 19)
- Drag & drop optimiste (mise à jour immédiate + rollback si erreur)
- Filtrage par statut/priorité/assigné
- Recherche en temps réel dans les tâches
- Interface de filtrage complète (KanbanFilters.tsx)
- Logique de filtrage dans TasksContext
- Tri des tâches (date, priorité, alphabétique)
2.7 Système de thèmes (clair/sombre)
- Créer le contexte de thème (ThemeContext + ThemeProvider)
- Ajouter toggle de thème dans le Header (bouton avec icône soleil/lune)
- Définir les variables CSS pour le thème clair
- Adapter tous les composants UI pour supporter les deux thèmes
- Modifier la palette de couleurs pour le mode clair
- Adapter les composants Kanban (Board, TaskCard, Column)
- Adapter les formulaires et modales
- Adapter la page de gestion des tags
- Sauvegarder la préférence de thème (localStorage)
- Configuration par défaut selon préférence système (prefers-color-scheme)
📊 Phase 3: Intégrations et analytics (Priorité 3)
3.1 Gestion du Daily
- Créer
services/daily.ts- Service de gestion des daily notes - Modèle de données Daily (date, checkboxes hier/aujourd'hui)
- Interface Daily avec sections "Hier" et "Aujourd'hui"
- Checkboxes interactives avec état coché/non-coché
- Liaison optionnelle checkbox ↔ tâche existante
- Cocher une checkbox NE change PAS le statut de la tâche liée
- Navigation par date (daily précédent/suivant)
- Auto-création du daily du jour si inexistant
- UX améliorée : édition au clic, focus persistant, input large
- Vue calendar/historique des dailies
3.2 Intégration Jira Cloud
- Créer
services/jira.ts- Service de connexion à l'API Jira Cloud - Configuration Jira (URL, email, API token) dans
lib/config.ts - Authentification Basic Auth (email + API token)
- Récupération des tickets assignés à l'utilisateur
- Mapping des statuts Jira vers statuts internes (todo, in_progress, done, etc.)
- Synchronisation unidirectionnelle (Jira → local uniquement)
- Gestion des diffs - ne pas écraser les modifications locales
- Style visuel distinct pour les tâches Jira (bordure spéciale)
- Métadonnées Jira (projet, clé, assignee) dans la base
- Possibilité d'affecter des tags locaux aux tâches Jira
- Interface de configuration dans les paramètres
- Synchronisation manuelle via bouton (pas d'auto-sync)
- Logs de synchronisation pour debug
- Gestion des erreurs et timeouts API
3.3 Page d'accueil/dashboard
- Créer une page d'accueil moderne avec vue d'ensemble
- Widgets de statistiques (tâches par statut, priorité, etc.)
- Déplacer kanban vers /kanban et créer nouveau dashboard à la racine
- Actions rapides vers les différentes sections
- Affichage des tâches récentes
- Graphiques de productivité (tâches complétées par jour/semaine)
- Indicateurs de performance personnels
- Intégration des analytics dans le dashboard
3.4 Analytics et métriques
services/analytics.ts- Calculs statistiques- Métriques de productivité (vélocité, temps moyen, etc.)
- Graphiques avec Recharts (tendances, vélocité, distribution)
- Composants de graphiques (CompletionTrend, Velocity, Priority, Weekly)
- Insights automatiques et métriques visuelles
Autre Todo
- Avoir un bouton pour réduire/agrandir la font des taches dans les kanban (swimlane et classique)
- Refactorer les couleurs des priorités dans un seul endroit
- Settings synchro Jira : ajouter une liste de projet à ignorer, doit etre pris en compte par le service bien sur
- Faire des pages à part entière pour les sous-pages de la page config + SSR
- Afficher dans l'édition de task les todo reliés. Pouvoir en ajouter directement avec une date ou sans.
- Dans les titres de colonnes des swimlanes, je n'ai pas les couleurs des statuts
- Système de sauvegarde automatique base de données
- Sauvegarde automatique configurable (hourly/daily/weekly)
- Configuration complète dans les paramètres avec interface dédiée
- Rotation automatique des sauvegardes (configurable)
- Format de sauvegarde avec timestamp + compression optionnelle
- Interface complète pour visualiser et gérer les sauvegardes
- CLI d'administration pour les opérations avancées
- API REST complète pour la gestion programmatique
- Vérification d'intégrité et restauration sécurisée
- Option de restauration depuis une sauvegarde sélectionnée
🔧 Phase 4: Server Actions - Migration API Routes (Nouveau)
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.tsavec server actions de base updateTaskStatus(taskId, status)- Changement de statutupdateTaskTitle(taskId, title)- Édition inline du titredeleteTask(taskId)- Suppression de tâche- Modifier
TaskCard.tsxpour utiliser server actions directement - Remplacer les props callbacks par calls directs aux actions
- Intégrer
useTransitionpour les loading states natifs - Tester la revalidation automatique du cache
- Nettoyage : Supprimer props obsolètes dans tous les composants Kanban
- Nettoyage : Simplifier
tasks-client.ts(garder GET et POST uniquement) - Nettoyage : Modifier
useTasks.tspour remplacer mutations par server actions
Actions Daily (Priorité 2)
- Créer
actions/daily.tspour les checkboxes toggleCheckbox(checkboxId)- Toggle état checkboxaddCheckboxToDaily(dailyId, content)- Ajouter checkboxupdateCheckboxContent(checkboxId, content)- Éditer contenudeleteCheckbox(checkboxId)- Supprimer checkboxreorderCheckboxes(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 hook
useDaily.tspouruseTransition
Actions User Preferences (Priorité 3)
- Créer
actions/preferences.tspour les toggles updateViewPreferences(preferences)- Préférences d'affichageupdateKanbanFilters(filters)- Filtres KanbanupdateColumnVisibility(columns)- Visibilité colonnesupdateTheme(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
UserPreferencesContext.tsxpour server actions
Actions Tags (Priorité 4)
- Créer
actions/tags.tspour la gestion tags createTag(name, color)- Création tagupdateTag(tagId, data)- Modification tagdeleteTag(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.tspour 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 :
useTransitionloading states natifs - 🎯 Simplicité : Moins de boilerplate pour actions simples
📊 Phase 5: Surveillance Jira - Analytics d'équipe (Priorité 5)
5.1 Configuration projet Jira
- Ajouter champ
projectKeydans la config Jira (settings) - Interface pour sélectionner le projet à surveiller
- Validation de l'existence du projet via API Jira
- Sauvegarde de la configuration projet dans les préférences
- Test de connexion spécifique au projet configuré
5.2 Service d'analytics Jira
- Créer
services/jira-analytics.ts- Métriques avancées - Récupération des tickets du projet (toute l'équipe, pas seulement assignés)
- Calculs de vélocité d'équipe (story points par sprint)
- Métriques de cycle time (temps entre statuts)
- Analyse de la répartition des tâches par assignee
- Détection des goulots d'étranglement (tickets bloqués)
- Historique des sprints et burndown charts
- Cache intelligent des métriques (éviter API rate limits)
5.3 Page de surveillance /jira-dashboard
- Créer page dédiée avec navigation depuis settings Jira
- Vue d'ensemble du projet (nom, lead, statut global)
- Sélecteur de période (7j, 30j, 3 mois, sprint actuel)
- Graphiques de vélocité avec Recharts
- Heatmap d'activité de l'équipe
- Timeline des releases et milestones
- Alertes visuelles (tickets en retard, sprints déviants)
5.4 Métriques et graphiques avancés
- Vélocité : Story points complétés par sprint
- Burndown chart : Progression vs planifié
- Cycle time : Temps moyen par type de ticket
- Throughput : Nombre de tickets complétés par période
- Work in Progress : Répartition par statut et assignee
- Quality metrics : Ratio bugs/features, retours clients
- Predictability : Variance entre estimé et réel
- Collaboration : Matrice d'interactions entre assignees
5.5 Fonctionnalités de surveillance
- Cache serveur intelligent : Cache en mémoire avec invalidation manuelle
- Export des métriques : Export CSV/JSON avec téléchargement automatique
- Comparaison inter-sprints : Tendances, prédictions et recommandations
- Détection automatique d'anomalies (alertes)
- Filtrage par composant, version, type de ticket
- Vue détaillée par sprint avec drill-down
Intégration avec les daily notes (mentions des blockers)(supprimé)
📁 Refactoring structure des dossiers (PRIORITÉ HAUTE)
Problème actuel
- Structure mixte :
src/app/,src/actions/,src/contexts/maiscomponents/,lib/,services/, etc. à la racine - Alias TypeScript incohérents dans
tsconfig.json - Non-conformité avec les bonnes pratiques Next.js 13+ App Router
Plan de migration
-
Phase 1: Migration des dossiers
mv components/ src/components/mv lib/ src/lib/mv hooks/ src/hooks/mv clients/ src/clients/mv services/ src/services/
-
Phase 2: Mise à jour tsconfig.json
"paths": { "@/*": ["./src/*"] // Supprimer les alias spécifiques devenus inutiles } -
Phase 3: Correction des imports
- Tous les imports
@/services/*→@/services/*(déjà OK) - Tous les imports
@/lib/*→@/lib/*(déjà OK) - Tous les imports
@/components/*→@/components/*(déjà OK) - Tous les imports
@/clients/*→@/clients/*(déjà OK) - Tous les imports
@/hooks/*→@/hooks/*(déjà OK) - Vérifier les imports relatifs dans les scripts/
- Tous les imports
-
Phase 4: Mise à jour des règles Cursor
- Règle "services" : Mettre à jour les exemples avec
src/services/ - Règle "components" : Mettre à jour avec
src/components/ - Règle "clients" : Mettre à jour avec
src/clients/ - Vérifier tous les liens MDC dans les règles
- Règle "services" : Mettre à jour les exemples avec
-
Phase 5: Tests et validation
npm run build- Vérifier que le build passenpm run dev- Vérifier que le dev fonctionnenpm run lint- Vérifier ESLintnpx tsc --noEmit- Vérifier TypeScript- Tester les fonctionnalités principales
Structure finale attendue
src/
├── app/ # Pages Next.js (déjà OK)
├── actions/ # Server Actions (déjà OK)
├── contexts/ # React Contexts (déjà OK)
├── components/ # Composants React (à déplacer)
├── lib/ # Utilitaires et types (à déplacer)
├── hooks/ # Hooks React (à déplacer)
├── clients/ # Clients HTTP (à déplacer)
└── services/ # Services backend (à déplacer)
## Autre Todos
- [x] Synchro Jira auto en background timé comme pour la synchro de sauvegarde
- [x] refacto des getallpreferences en frontend : ca devrait eter un contexte dans le layout qui balance serverside dans le hook
- [x] backups : ne backuper que si il y a eu un changement entre le dernier backup et la base actuelle
- [x] refacto des dates avec le utils qui pour l'instant n'est pas utilisé
- [x] split de certains gros composants.
- [x] Page jira-dashboard : onglets analytics avancés et Qualité et collaboration : les charts sortent des cards; il faut reprendre la UI pour que ce soit consistant.
- [x] Page Daily : les mots aujourd'hui et hier ne fonctionnent dans les titres que si c'est vraiment aujourd'hui :)