Files
towercontrol/TODO_ARCHIVE.md
Julien Froidefond 3cfed60f43 feat: refactor daily task management with new pending tasks section
- 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.
2025-09-21 19:55:04 +02:00

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 principal
  • components/kanban/Column.tsx - Colonnes du Kanban
  • components/kanban/TaskCard.tsx - Cartes de tâches
  • components/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 tags
  • clients/base/http-client.ts - Client HTTP de base
  • hooks/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.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 props obsolètes dans tous les composants Kanban
  • 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 hook useDaily.ts 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 UserPreferencesContext.tsx 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: Surveillance Jira - Analytics d'équipe (Priorité 5)

5.1 Configuration projet Jira

  • Ajouter champ projectKey dans 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/ mais components/, 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/
  • 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
  • Phase 5: Tests et validation

    • npm run build - Vérifier que le build passe
    • npm run dev - Vérifier que le dev fonctionne
    • npm run lint - Vérifier ESLint
    • npx 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 :)