Commit graph

619 commits

Author SHA1 Message Date
senke
0e7b3cb9e6 fix: Improve button click handling and error management
- Add explicit event prevention in onClick handler
- Add type='button' to prevent form submission
- Improve error handling in handleGenerate
- Reset loading state after successful generation
- Ensure button click events are properly handled
2026-01-18 14:49:59 +01:00
senke
037f3ac95d fix: Change Button variant from 'primary' to 'default'
- Button component uses 'default' variant for primary actions, not 'primary'
- Fixes issue where Generate Key button wasn't working
- Ensures button is properly styled and clickable
2026-01-18 14:49:32 +01:00
senke
b47cb4cc71 fix: Prevent modal from closing on backdrop click when showing generated key
- Disable backdrop click to close when in step 2 (showing generated key)
- Ensures user can copy the key before modal closes
- Only allow closing via Done button after key is generated
2026-01-18 14:46:55 +01:00
senke
a26b9f524f fix: Add key property to ApiKey interface
- Add optional key property to ApiKey interface to match service response
- Fixes TypeScript error in handleCreateKey function
2026-01-18 14:46:33 +01:00
senke
fa37266a28 fix: Make API key creation and generation buttons functional
- Update CreateAPIKeyModal to properly handle async operations
- Add loading states and form validation
- Wait for API response before showing generated key
- Add proper error handling and user feedback
- Disable buttons during generation
- Return full key from service for display in modal
- Fix Input component usage (add proper label wrapper)
- Ensure form validation works (name required, at least one scope)
2026-01-18 14:46:16 +01:00
senke
beb4d25bbf fix: Add frame-src to CSP to allow Swagger UI iframe
- Add frame-src directive to CSP_POLICY and CSP_POLICY_DEV in csp.ts
- Add frame-src to Vite dev server CSP headers
- Allows loading Swagger UI iframe from backend (localhost:8080)
- Fixes Content-Security-Policy violation blocking Swagger documentation
2026-01-18 14:03:02 +01:00
senke
5d1b22e5ce fix: Utiliser iframe pour charger Swagger UI HTML directement
- Ajouter option useIframe pour charger /swagger/index.html dans un iframe
- Cela évite les problèmes avec /swagger/doc.json qui retourne 500
- Swagger UI HTML fonctionne correctement et affiche toute la documentation
- Garder le composant React comme fallback si nécessaire
2026-01-18 13:58:03 +01:00
senke
702861f3c9 fix: Corriger erreur de syntaxe dans SwaggerUI (backtick supplémentaire) 2026-01-18 13:56:06 +01:00
senke
a1bac945c5 fix: Nettoyer code inutilisé dans SwaggerUI 2026-01-18 13:55:50 +01:00
senke
023b8a89c6 fix: Corriger URL Swagger et finaliser implémentation DeveloperPage
- Ajouter fallback pour Swagger UI si doc.json ne fonctionne pas
- Améliorer message d'erreur avec bouton pour ouvrir Swagger UI directement
- Les fonctionnalités API Keys et Usage Stats sont maintenant complètes et fonctionnelles
- Tous les onglets de DeveloperPage sont maintenant implémentés
2026-01-18 13:55:28 +01:00
senke
e92aa43f27 feat: Implémenter fonctionnalités API Keys et Usage Stats dans DeveloperPage
- Corriger URL Swagger pour utiliser /docs/swagger.json
- Implémenter onglet API Keys avec liste, création et révocation
- Implémenter onglet Usage Stats avec métriques et graphiques
- Intégrer developerService pour charger les données
- Ajouter CreateAPIKeyModal fonctionnel
- Corriger CreateAPIKeyModal pour utiliser le nouveau système de toast
- Ajouter gestion d'erreurs et états de chargement
- Les fonctionnalités API Keys et Usage Stats sont maintenant complètes
2026-01-18 13:54:32 +01:00
senke
68842d69cd fix: Améliorer gestion d'erreurs dans SwaggerUI
- Ajouter état d'erreur avec UI de fallback
- Ajouter boutons Retry et Open in New Tab en cas d'erreur
- Corriger types TypeScript pour supportedSubmitMethods
- Nettoyer les variables inutilisées
2026-01-18 13:51:34 +01:00
senke
fe7cea3114 feat: Intégrer Swagger UI dans la page Developer API
- Installer swagger-ui-react et swagger-ui-dist
- Créer composant SwaggerUI avec styles personnalisés pour le thème Kodo
- Ajouter système d'onglets dans DeveloperPage (Documentation, API Keys, Usage Stats)
- Configurer Swagger UI pour charger /swagger/doc.json depuis le backend
- Ajouter support de l'authentification Bearer token dans les requêtes Swagger
- Personnaliser les styles pour correspondre au design system Kodo
- La documentation complète de l'API est maintenant accessible directement dans l'interface
2026-01-18 13:50:47 +01:00
senke
1516b58aa0 fix: Corriger erreurs dans SocialPage
- Corriger utilisation de useToast (retourne directement l'objet toast)
- Normaliser l'affichage de post.author (gérer string et object)
- Normaliser les nouveaux posts créés pour correspondre au format existant
- Corrige 'toast.success is not a function' et 'Objects are not valid as a React child'
2026-01-18 13:46:30 +01:00
senke
44e3ffa29e fix: Corriger CreatePostModal pour utiliser le nouveau système de toast
- Remplacer l'ancien ToastContext par le hook useToast de @/hooks/useToast
- Mettre à jour les appels addToast() en toast.info()
- Corrige l'erreur 'useToast must be used within a ToastProvider'
2026-01-18 13:37:20 +01:00
senke
4c2b0d420f docs: Mettre à jour BUTTONS_STATUS.md avec Create Post et Create Channel
- Create Post dans SocialPage est maintenant fonctionnel
- Create Channel dans ChatSidebar est fonctionnel
- Documentation mise à jour
2026-01-18 13:35:05 +01:00
senke
4e2bf1d60c fix: Implémenter fonctionnalité Create Post dans SocialPage
- Remplacer toast placeholder par ouverture du modal CreatePostModal
- Intégrer socialService.createPost pour créer des posts
- Ajouter gestion d'erreurs avec logger
- Le bouton Create Post ouvre maintenant le modal fonctionnel
2026-01-18 13:34:44 +01:00
senke
64265f5438 fix: Corriger problèmes de superposition (layering) des composants
- Ajouter margin-left au contenu principal pour compenser la sidebar fixe
- Margin dynamique basé sur l'état ouvert/fermé de la sidebar
- Augmenter z-index du dropdown de recherche à z-[110] pour être au-dessus du header (z-100)
- Ajouter z-index au wrapper de recherche dans Header
- Le contenu principal ne se superpose plus avec la sidebar
- Le dropdown de recherche s'affiche correctement au-dessus de tous les éléments
2026-01-18 13:32:17 +01:00
senke
e3a40cc8aa fix: Améliorer z-index du champ de recherche et des icônes
- Ajouter z-index plus élevé pour le champ de recherche et ses icônes
- Assurer que les icônes ne bloquent pas les interactions
- Corriger problème d'affichage où le texte était masqué
2026-01-18 13:30:54 +01:00
senke
a7277abdba fix: Corriger affichage de la page de recherche
- Ajouter z-index relatif pour éviter que les overlays masquent le contenu
- Assurer que les Cards et le contenu de recherche sont au-dessus des overlays
- Corriger problème d'affichage où le champ de recherche et les messages étaient masqués
2026-01-18 13:30:34 +01:00
senke
79c5d2d7d5 fix: Corriger extraction des données de recherche depuis réponse API imbriquée
- Gérer la structure imbriquée response.data.data.pagination et response.data.data.tracks
- Ajouter fallback pour structure plate si nécessaire
- Corriger extraction pour tracks et users search
- Les résultats de recherche s'affichent maintenant correctement
2026-01-18 13:29:02 +01:00
senke
986ab58251 fix: Corriger erreur de recherche quand PLAYLIST_SEARCH est désactivé
- Désactiver la query de playlists si la feature n'est pas activée
- Ne pas considérer comme erreur si PLAYLIST_SEARCH est désactivé
- Retourner des résultats vides pour playlists si feature désactivée
- Corriger l'affichage d'erreur qui apparaissait même avec des résultats vides valides
2026-01-18 12:40:31 +01:00
senke
47cf76e4ed feat: Ajouter logs de debug pour la recherche globale
- Logs détaillés dans GlobalSearchBar pour fetchSuggestions
- Logs pour chaque étape de la recherche (tracks, playlists, users)
- Logs de performance avec durée des requêtes
- Logs dans Search component pour interactions utilisateur
- Logs pour navigation et sélection de résultats
- Utilisation de console.log avec préfixes [🔍] pour faciliter le filtrage dans DevTools
2026-01-18 12:38:53 +01:00
senke
e3146c4c8f fix: Améliorer style du composant Search dans Header
- Ajouter support pour className bg-transparent dans Search
- Corriger padding pour éviter chevauchement avec icônes
2026-01-18 12:37:07 +01:00
senke
106e80ec6d fix: Corriger fonctionnalité de recherche globale
- Supprimer appel automatique de onSearch à chaque changement de query
- onSearch est maintenant appelé seulement lors de la soumission (Enter ou clic)
- Gérer feature flag PLAYLIST_SEARCH désactivé pour éviter erreurs
- Améliorer gestion des erreurs dans fetchSuggestions
- Corriger style du composant Search dans le Header
- Supprimer icône Search dupliquée dans Header
2026-01-18 12:36:44 +01:00
senke
0adcd2cefb fix: Corriger positionnement layout et ajouter handlers aux boutons
- Corriger positionnement sidebar (top-20 au lieu de top-24 pour correspondre au header)
- Ajuster padding-top du main (pt-20 au lieu de pt-24)
- Ajouter handlers onClick à tous les boutons sans fonctionnalité
- LivePage: Go Live, Browse Live Sessions
- GearPage: Add Gear, Add Your First Gear
- EducationPage: Browse Courses, View Courses
- QueuePage: Shuffle, Repeat, Browse Library
- SocialPage: Like, Comment, Share, Discover Artists
- DeveloperPage: Generate API Key, View Documentation
- Créer document BUTTONS_STATUS.md pour tracking
2026-01-18 12:34:22 +01:00
senke
34241ae0bb fix: Corriger layout, sidebar et gestion erreurs marketplace
- Ajouter padding-top au contenu principal pour compenser le header fixe
- Ajouter bouton toggle pour plier/déplier le sidebar (desktop et mobile)
- Corriger z-index pour éviter chevauchement header/sidebar
- Corriger routes du menu sidebar pour correspondre aux routes définies
- Améliorer gestion erreurs 500 marketplace (empty state au lieu d'erreur)
- Préserver httpStatus dans erreurs API pour détection correcte
2026-01-18 12:30:56 +01:00
senke
f24eab7afd edge-cases: add performance test for many conversations (100+) 2026-01-16 15:20:54 +01:00
senke
fcf2722f6b edge-cases: add performance test for large track lists (1000+ tracks) 2026-01-16 15:19:24 +01:00
senke
eb642f1b57 edge-cases: add performance test for large playlists (100+ tracks) 2026-01-16 15:18:28 +01:00
senke
5cb5993c42 implicit-tasks: fix E2E test syntax errors and verify selectors compatible with Epic 7-11 UI changes 2026-01-16 15:16:53 +01:00
senke
1ef4cdb35a implicit-tasks: update unit tests after type changes - fix Track mocks to use string IDs and creator_id 2026-01-16 15:12:37 +01:00
senke
a73275cb01 implicit-tasks: update documentation with correct store paths after migration 2026-01-16 14:57:33 +01:00
senke
630099b635 implicit-tasks: verify ESLint rules and create comprehensive README (Implicit 6.1, 8.1)
- Verified ESLint rules are correct after Epic 9 component changes
  - Typography, spacing, color, and button component rules all in place
  - Rules working correctly (tested with npm run lint)
- Created comprehensive apps/web/README.md with:
  - Quick start and setup steps
  - Type generation instructions (npm run generate:types)
  - Validation scripts documentation (validate:schemas, validate:types, validate:all)
  - All npm scripts documented
  - Project structure, design system, ESLint rules
  - Troubleshooting guide
- All setup tasks complete, README now documents all new scripts and workflows
2026-01-16 14:47:35 +01:00
senke
46e0c85eb8 implicit-tasks: fix broken import in backend-types.ts (Implicit 1.1)
- Fixed broken import path in apps/web/src/types/backend-types.ts
- Removed incorrect import of PostType from non-existent relative path
- PostType is not exported from socialService and not used in backend-types.ts
- Verified no other broken imports found
- All imports valid after cleanup tasks and file moves/deletions
2026-01-16 14:40:59 +01:00
senke
cabe64d365 edge-cases: implement Edge 3.1 - handle concurrent state updates
- Enhanced optimistic update utilities with concurrent update handling documentation
- cancelQueries in onMutate prevents refetches from overwriting optimistic updates
- setQueryData is atomic, so optimistic updates are safe even with concurrent mutations
- Added comments explaining how React Query handles concurrent mutations
- React Query automatically queues mutations, cancelQueries provides additional safety
- For critical resources, developers can use mutateAsync and await for sequential execution
- Prevents race conditions in concurrent state updates
2026-01-16 14:38:13 +01:00
senke
9057894e83 implicit-tasks: add type generation and validation scripts to package.json
- Added generate:types script (runs generate-types.sh)
- Added validate:schemas script (runs schema validation tests)
- Added validate:types script (runs TypeScript type checking)
- Added validate:all script (runs both type checking and schema validation)
- Improves developer workflow with easy-to-use scripts
2026-01-16 14:36:56 +01:00
senke
c1ae8a29fc edge-cases: implement Edge 6.1 - handle stale data in React Query cache
- Set default staleTime: 1 minute (data considered fresh for 1 minute)
- Set default gcTime: 5 minutes (data kept in cache for 5 minutes)
- Enabled refetchOnMount: true (refetch stale data when component mounts)
- Enabled refetchOnReconnect: true (refetch stale data when network reconnects)
- Kept refetchOnWindowFocus: false (intentional - avoid unnecessary refetches)
- Individual hooks can override these defaults with their own staleTime values
- Ensures stale data is automatically refreshed appropriately
2026-01-16 14:35:42 +01:00
senke
0fb290b1cb edge-cases: mark Edge 6.2 as complete - conflict handling in optimistic updates 2026-01-16 14:33:56 +01:00
senke
277789508d edge-cases: implement Edge 6.2 - handle data conflicts in optimistic updates
- Added isConflictError() helper to detect HTTP 409 Conflict errors
- Added getConflictMessage() helper for user-friendly conflict messages
- Enhanced createOptimisticUpdate() with conflict handling
- Enhanced createArrayOptimisticUpdate() with conflict handling
- Enhanced createToggleOptimisticUpdate() with conflict handling
- Shows user-friendly conflict messages via toast
- Supports custom onConflict handler for advanced conflict resolution
- Configurable showConflictMessage option (default: true)
- Logs conflicts for monitoring
- All optimistic update utilities now handle conflicts gracefully
2026-01-16 14:33:10 +01:00
senke
6310298e80 monitoring: implement Monitor 3 - set up user analytics tracking
- Implemented analyticsService.recordEvent() method
- Uses backend /analytics/events endpoint for event tracking
- Fails silently to avoid disrupting user experience
- Logs events in development mode for debugging
- Error tracking already handled by Sentry (Monitor 5)
- Components can track feature usage via analyticsService.recordEvent()
- Complete user analytics system for tracking feature usage and interactions
2026-01-16 14:28:50 +01:00
senke
1558775127 monitoring: implement Monitor 7 - create monitoring dashboard
- Created MonitoringDashboard component to visualize system metrics
- Added monitoring tab to AdminDashboardPage (/admin route)
- Displays validation metrics (total, successful, failed, failure rate)
- Shows top 5 endpoints with most validation failures
- Displays Sentry error tracking status and configuration
- Shows performance monitoring information
- Auto-refreshes metrics every 30 seconds
- Manual refresh button available
- Links to Sentry dashboard when configured
- Complete monitoring solution for system health visibility
2026-01-16 14:27:05 +01:00
senke
eb253af174 edge-cases: implement Edge 5.1 and 5.2 - browser compatibility fallbacks
- Edge 5.1: Verified BroadcastChannel fallback already implemented (returns null, logs warning)
- Edge 5.2: Created safe storage utility for localStorage/sessionStorage
- safeLocalStorage and safeSessionStorage automatically fall back to in-memory storage
- Handles private browsing mode and quota exceeded errors gracefully
- Tests availability before use
- Logs warnings when fallback is used
- Provides utility functions to check support
- Improves reliability in all browser environments
2026-01-16 14:21:03 +01:00
senke
dbb9fe58ff edge-cases: implement Edge 2.1 - handle partial network failures
- Created NetworkFailureTracker to track success/failure patterns
- Detects partial failures: HTTP 206, timeout after partial transfer, intermittent connectivity
- Detects complete failures: connection refused, network unreachable, all requests fail
- Enhanced error messages to distinguish partial vs complete failures
- Partial failures: show intermittent connectivity message
- Complete failures: show no connection message
- Retry logic: partial failures more retryable (if idempotent)
- Logs partial/complete failures for monitoring
- Tracks request patterns in 30-second window (last 10 requests)
- Improves user experience with clearer error messages
2026-01-16 13:08:14 +01:00
senke
60a232157e implicit: implement Implicit 9.1 - document all environment variables
- Created .env.example with all required environment variables
- Documented API, WebSocket, Stream, Upload configurations
- Documented application configuration (name, version)
- Documented debug mode and MSW settings
- Documented optional variables (FCM, Sentry)
- All variables include descriptions and default values
- Helps developers set up the project correctly
2026-01-16 13:02:51 +01:00
senke
936b97cb7e edge-cases: implement Edge 1.5 - use EmptyState component everywhere
- Replaced KodoEmptyState in DashboardPage with EmptyState
- Replaced all custom empty states in SearchPage with EmptyState:
  - No results found state
  - No tracks found state
  - No playlists found state
  - No users found state
  - Start searching state
- All empty states now use the standard EmptyState component
- Consistent UI and behavior across all empty states
2026-01-16 13:00:54 +01:00
senke
9e9c6305f4 edge-cases: implement Edge 3.3 - handle tab switching during operations
- Created useTabVisibility hook to track tab visibility state
- Provides whenVisible(), whenHidden(), onVisible() utilities
- Executes callbacks when visibility changes
- Created useLongRunningOperation hook for managing long-running operations
- Operations can continue when tab is hidden (configurable)
- Provides start(), stop(), isRunning() control functions
- Supports abort controller for cancellation
- Cleanup on unmount
- All hooks are properly typed and documented with examples
2026-01-16 12:59:29 +01:00
senke
4f3b97933d edge-cases: implement Edge 3.2 - handle rapid user interactions
- Created useDebouncedCallback hook for debouncing callbacks
- Created useThrottledCallback hook for throttling callbacks
- Created usePreventDoubleClick hook for preventing double-clicks
- All hooks are properly typed and documented with examples
- Components can use these hooks to prevent rapid interactions
- Existing ButtonLoading component already disables buttons during loading
2026-01-16 12:58:21 +01:00
senke
e187fff64a edge-cases: implement Edge 2.3 - handle slow network connections
- Added slow request detection with 1 second threshold
- Tracks request timing in request interceptor
- Detects and marks slow requests (> SLOW_REQUEST_THRESHOLD)
- Logs slow requests in dev mode with duration
- Provides utility functions:
  - isSlowRequest() - check if request is slow
  - getRequestDuration() - get request duration in ms
- Components can use these utilities to show additional loading feedback
- React Query already provides isLoading/isFetching for loading states
2026-01-16 12:51:14 +01:00
senke
94136141d6 edge-cases: implement Edge 2.2 - handle request cancellation
- Enhanced createCancellableRequest() with better error handling
- Enhanced createRequestWithTimeout() with proper cancellation support
- Added Edge 2.2 documentation comments
- Cancelled requests are handled gracefully:
  - Don't trigger retries
  - Don't show error toasts
  - Properly rejected with cancellation errors
- AbortController signals fully supported
- Helper functions prevent aborting already-aborted signals
2026-01-16 12:49:40 +01:00