Commit Graph

51 Commits

Author SHA1 Message Date
DahoudG
be04ef16d9 Fix: Connexion des pages de détails aux APIs backend avec authentification cookies
- Mise à jour de services/api.ts pour supporter l'authentification par cookies HttpOnly
  * Ajout de withCredentials: true dans l'intercepteur de requêtes
  * Modification de l'intercepteur de réponse pour gérer les 401 sans localStorage
  * Utilisation de sessionStorage pour returnUrl au lieu de localStorage
  * Suppression des tentatives de nettoyage de tokens localStorage (gérés par cookies)

- Connexion des pages de détails à apiService au lieu de fetch direct:
  * app/(main)/chantiers/[id]/page.tsx → apiService.chantiers.getById()
  * app/(main)/chantiers/[id]/budget/page.tsx → apiService.budgets.getByChantier()
  * app/(main)/clients/[id]/page.tsx → apiService.clients.getById()
  * app/(main)/materiels/[id]/page.tsx → apiService.materiels.getById()

Avantages:
- Gestion automatique de l'authentification via cookies HttpOnly (plus sécurisé)
- Redirection automatique vers /api/auth/login en cas de 401
- Code plus propre et maintenable
- Gestion d'erreurs cohérente dans toute l'application

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-31 12:04:35 +00:00
DahoudG
a91a34dbf8 feat: Pages de détails complètes pour chantiers, clients et matériels
PHASE 2 - FINALISATIONS FONCTIONNELLES TERMINÉES

 Pages Chantiers [id] créées:
- /chantiers/[id]: Vue d'ensemble avec statistiques et navigation
- /chantiers/[id]/budget: Suivi budgétaire détaillé avec graphiques
- /chantiers/[id]/planning: Chronologie et planning des tâches
- /chantiers/[id]/documents: Gestion des documents du chantier
- /chantiers/[id]/equipe: Liste et gestion de l'équipe affectée

 Pages Clients [id] créées:
- /clients/[id]: Fiche client complète avec coordonnées
- Onglets: Chantiers, Factures, Documents
- Statistiques et historique complet

 Pages Matériels [id] créées:
- /materiels/[id]: Fiche matériel avec informations techniques
- Calendrier de disponibilité
- Onglets: Réservations, Maintenances, Documents
- Timeline des maintenances

Fonctionnalités implémentées:
- Navigation fluide entre les pages
- Boutons retour vers listes principales
- DataTables avec tri et filtres
- Graphiques budget (bar chart, doughnut)
- Calendriers et timeline
- Tags de statut colorés
- Cards statistiques
- Responsive design

Technologies utilisées:
- PrimeReact (DataTable, Chart, Calendar, Timeline, TabView)
- Next.js App Router avec dynamic routes [id]
- TypeScript avec interfaces typées
- Integration API backend via fetch

Prochaines étapes:
- Connecter aux vraies APIs backend
- Ajouter formulaires de modification
- Implémenter actions (supprimer, modifier)
- Ajouter toasts de confirmation

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-31 11:52:21 +00:00
DahoudG
5da5290a6d feat: Implémentation complète du système d'authentification OAuth
PHASE 1 - CORRECTIONS CRITIQUES TERMINÉES

 API Routes Auth créées:
- /api/auth/login: Initie le flux OAuth avec Keycloak
- /api/auth/token: Échange le code OAuth contre des tokens
- /api/auth/logout: Déconnexion et nettoyage des tokens
- /api/auth/userinfo: Récupère les informations utilisateur

 Middleware d'authentification:
- Protection des routes privées
- Vérification de l'access_token dans les cookies HttpOnly
- Vérification de l'expiration des tokens
- Redirection automatique vers /auth/login si non authentifié
- Routes publiques configurées (/auth/*, /api/health, /)

 Page de login:
- Interface moderne avec PrimeReact
- Redirection vers Keycloak OAuth
- Gestion du returnUrl pour revenir à la page demandée

 Sécurité:
- Tokens stockés dans cookies HttpOnly (pas localStorage)
- Protection CSRF avec state parameter
- Validation de l'expiration des tokens
- Nettoyage automatique des cookies expirés

 Callback OAuth:
- Protection contre les appels multiples (useRef)
- Gestion d'erreurs robuste
- Nettoyage de l'URL après échange
- Suspense boundary pour le chargement

Cette implémentation résout les problèmes critiques:
- Boucle OAuth infinie (code réutilisé)
- Absence d'API route token exchange
- Middleware non fonctionnel
- Pas de page de login

🤖 Generated with Claude Code
Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-31 11:46:18 +00:00
dahoud
a7f8596947 Fix: Conversion complète vers PrimeReact et corrections build
CONVERSIONS UI (8 pages):
 Remplacement de tous les composants Shadcn/UI par PrimeReact
- Card, Button, Input, Textarea, Badge → Card, Button, InputText, InputTextarea, Tag
- Conversion de toutes les icônes lucide-react en primeicons

Pages converties:
- app/(main)/aide/page.tsx
- app/(main)/aide/documentation/page.tsx
- app/(main)/aide/tutoriels/page.tsx
- app/(main)/aide/support/page.tsx
- app/(main)/messages/page.tsx
- app/(main)/messages/nouveau/page.tsx
- app/(main)/messages/envoyes/page.tsx
- app/(main)/messages/archives/page.tsx

CORRECTIONS BUILD:
 Résolution des conflits de dépendances FullCalendar
- @fullcalendar/core: 6.1.4 → ^6.1.19
- Alignement avec daygrid, timegrid, interaction, react

 Correction des erreurs TypeScript
- DataTable: Ajout de selectionMode="multiple"
- InputText number: Conversion number → string avec .toString()

 Correction des services API (3 fichiers)
- fournisseurService.ts
- notificationService.ts
- userService.ts
- Remplacement des appels apiService.get() par axios direct
- Ajout du préfixe /api/v1/ à tous les endpoints
- Configuration d'interceptors pour authentication tokens

RÉSULTAT:
 Build réussi: 126 pages générées
 0 erreurs de compilation
 0 erreurs TypeScript
 Architecture cohérente avec PrimeReact

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-31 10:24:30 +00:00
dahoud
e15d717a40 Fix: Correction critique de la boucle OAuth - Empêcher les échanges multiples du code
PROBLÈME RÉSOLU:
- Erreur "Code already used" répétée dans les logs Keycloak
- Boucle infinie de tentatives d'échange du code d'autorisation OAuth
- Utilisateurs bloqués à la connexion

CORRECTIONS APPLIQUÉES:
1. Ajout de useRef pour protéger contre les exécutions multiples
   - hasExchanged.current: Flag pour prévenir les réexécutions
   - isProcessing.current: Protection pendant le traitement

2. Modification des dépendances useEffect
   - AVANT: [searchParams, router] → exécution à chaque changement
   - APRÈS: [] → exécution unique au montage du composant

3. Amélioration du logging
   - Console logs pour debug OAuth flow
   - Messages emoji pour faciliter le suivi

4. Nettoyage de l'URL
   - window.history.replaceState() pour retirer les paramètres OAuth
   - Évite les re-renders causés par les paramètres dans l'URL

5. Gestion d'erreurs améliorée
   - Capture des erreurs JSON du serveur
   - Messages d'erreur plus explicites

FICHIERS AJOUTÉS:
- app/(main)/aide/* - 4 pages du module Aide (documentation, tutoriels, support)
- app/(main)/messages/* - 4 pages du module Messages (inbox, envoyés, archives)
- app/auth/callback/page.tsx.backup - Sauvegarde avant modification

IMPACT:
 Un seul échange de code par authentification
 Plus d'erreur "Code already used"
 Connexion fluide et sans boucle
 Logs propres et lisibles

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-30 23:45:33 +00:00
dahoud
0e21771b7c Fix: Mise à jour du callback OAuth pour utiliser les cookies HttpOnly
- Suppression du stockage localStorage dans /auth/callback
- Utilisation de window.location.href pour la redirection
- Les tokens sont maintenant gérés uniquement par les cookies HttpOnly

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-19 17:49:49 +00:00
dahoud
418fac529a Fix: Correction de la boucle de redirection OAuth infinie
- Stockage des tokens dans des cookies HttpOnly côté serveur
- Suppression du stockage localStorage côté client
- Modification du middleware pour vérifier les cookies HttpOnly
- Redirection propre après authentification
- Suppression du nettoyage précoce des paramètres URL

Cela corrige le problème où le dashboard se rafraîchissait en boucle
après l'authentification Keycloak.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-19 12:37:00 +00:00
dahoud
a8825a058b Fix: Corriger toutes les erreurs de build du frontend
- Correction des erreurs TypeScript dans userService.ts et workflowTester.ts
- Ajout des propriétés manquantes aux objets User mockés
- Conversion des dates de string vers objets Date
- Correction des appels asynchrones et des types incompatibles
- Ajout de dynamic rendering pour résoudre les erreurs useSearchParams
- Enveloppement de useSearchParams dans Suspense boundary
- Configuration de force-dynamic au niveau du layout principal

Build réussi: 126 pages générées avec succès

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-18 13:23:08 +00:00
dahoud
c377291608 fix: Explicitly type label as string in statutBodyTemplate 2025-10-16 09:12:14 +00:00
dahoud
0c84ef7874 fix: Explicitly type label as string in typeBodyTemplate 2025-10-16 01:34:15 +00:00
dahoud
6f0c2c09c8 fix: Add selectionMode to DataTable for maintenances 2025-10-16 01:21:59 +00:00
dahoud
8484d4cb27 fix: Add selectionMode to DataTable for materiels 2025-10-15 23:17:01 +00:00
dahoud
515798026d fix: Add tooltip prop to maintenance EditButton and DeleteButton 2025-10-15 23:02:31 +00:00
dahoud
60bc115d27 fix: Add tooltip prop to EditButton and DeleteButton 2025-10-15 22:57:35 +00:00
dahoud
10dba332c2 fix: Replace ActionButton with Button for maintenance action to support event parameter 2025-10-15 22:53:08 +00:00
dahoud
04459d0cfa fix: Change ActionButton color from info/secondary to blue/default 2025-10-15 22:47:59 +00:00
dahoud
d2fb2def34 fix: Remove size prop from Tag components in planning/materiel/page.tsx 2025-10-15 22:34:59 +00:00
dahoud
bd59498155 fix: Add selectionMode to second DataTable in planning/equipes/page.tsx 2025-10-15 21:46:48 +00:00
dahoud
d44657dd5f fix: Add selectionMode to DataTable in planning/equipes/page.tsx 2025-10-15 21:42:05 +00:00
dahoud
c683edb250 fix: Replace timeFormat with hourFormat in Calendar components 2025-10-15 21:37:10 +00:00
dahoud
b5916fbe35 fix: Remove size prop from Tag components 2025-10-15 21:15:05 +00:00
dahoud
d537b0c1c2 fix: Use TypeConflitPlanification and GraviteConflict enums instead of strings 2025-10-15 21:10:33 +00:00
dahoud
9ba1e71041 fix: Convert phase.id to Number for phaseChantierService.resume call 2025-10-15 20:42:19 +00:00
DahoudG
6269c0d096 fix: Change Button size from normal to small 2025-10-15 20:12:57 +00:00
dahoud
bd3c342acd fix: Change Button size from 'normal' to 'small' in phases-chantier/retard/page.tsx 2025-10-15 20:06:40 +00:00
dahoud
aed2ce0182 fix: Resolve TypeScript errors in page.tsx and phases-chantier/page.tsx 2025-10-15 20:01:04 +00:00
dahoud
763ab81da3 fix: Remove incorrect client transformation in factures/page.tsx 2025-10-15 12:51:26 +00:00
dahoud
b0049c8d88 fix: Use typeFacture instead of type and add required Facture fields (dateCreation, dateModification, client) 2025-10-13 19:42:45 +00:00
dahoud
2b6fb084d3 fix: Use StatutFacture and TypeFacture enums instead of string literals 2025-10-13 18:43:23 +00:00
dahoud
bed5c8dced fix: Convert Date to ISO string in Facture state initialization 2025-10-13 18:19:17 +00:00
dahoud
369edac4a3 fix: Convert date strings to Date objects for Calendar component in factures/nouvelle 2025-10-13 18:01:26 +00:00
dahoud
77e6eb2a82 fix: Assign full Devis object instead of just ID in factures/nouvelle 2025-10-13 17:24:52 +00:00
dahoud
f22bfe5760 fix: Revert Date to ISO string conversions for local state objects (they expect Date not string) 2025-10-13 16:30:54 +00:00
dahoud
bb19e2af0d fix: Revert Date conversion for chantierData local state (expects Date not string) 2025-10-13 15:59:04 +00:00
dahoud
1d75cbf580 fix: Convert all remaining Date objects to ISO strings and fix client type in factures/nouvelle 2025-10-13 10:06:05 +00:00
dahoud
7517745505 fix: Convert Date to string for all remaining date fields in stock pages 2025-10-13 09:52:21 +00:00
dahoud
4b19fed103 fix: Convert Date to string for date fields in edit page 2025-10-13 09:50:32 +00:00
dahoud
703b8978fb fix: Convert Date to string for date fields in duplicate page 2025-10-13 08:36:43 +00:00
dahoud
f8796b0831 fix: Convert Date to string for dateEcheance in convert page 2025-10-13 08:30:49 +00:00
dahoud
67ec9bccf3 fix: Convert Date to string for dateEmission in convert page 2025-10-13 08:26:24 +00:00
dahoud
a58ceecd3d fix: Add return true to Chip onRemove handler in parametres page 2025-10-13 08:21:58 +00:00
dahoud
139a2357f4 fix: Update PrimeReact and fix all compilation errors 2025-10-13 07:58:17 +00:00
dahoud
30cad6220b fix: Update PrimeReact to v10.8.3 and fix all compilation errors 2025-10-13 03:01:36 +00:00
dahoud
2a2e54c0e3 fix: Update PrimeReact to v10.8.3 to fix missing modules 2025-10-13 02:59:06 +00:00
dahoud
f2606f8220 fix: Comment out unavailable MeterGroup import 2025-10-02 00:38:14 +00:00
dahoud
ede2fc0645 fix: Fix all newline escapes in attributions page 2025-10-02 00:31:43 +00:00
dahoud
d437b9354a fix: Properly fix Dropdown optionLabel syntax 2025-10-02 00:26:45 +00:00
dahoud
a59a0ceaa6 fix: Fix TypeScript error in Dropdown optionLabel 2025-10-02 00:22:57 +00:00
dahoud
3d081fd77d fix: Remove all demo/uikit pages for production 2025-10-02 00:15:59 +00:00
dahoud
5bdd4b6e4f fix: Remove demo pages and add testDataService for production build 2025-10-02 00:10:01 +00:00