Commit Graph

6 Commits

Author SHA1 Message Date
benoit 9350c9410c feat: système hot-reload bridge audio avec ConfigManager (Phase 2.5)
- ConfigManager: gestionnaire centralisé config avec EventEmitter
- AudioBridgeManager: gestion bridge avec auto-reload sur changement config
- Intégration dans serveur principal (index.js)
- Événements 'audio-device-updated' et 'config-updated'
- Reload automatique du bridge sans redémarrer serveur
- Mode placeholder pour développement (vrai bridge Phase 3)
2026-05-25 09:45:59 +02:00
benoit 03b3f94824 feat: ajout APIs détection et configuration cartes son (Phase 2.5)
- GET /admin/audio/devices : énumération devices CoreAudio
- GET /admin/audio/device : récupération config actuelle
- POST /admin/audio/device : sélection carte son + sample rate
- Workaround naudiodon segfault avec devices fictifs
- Configuration sauvegardée dans config.yaml
2026-05-25 09:40:43 +02:00
benoit c3b6af7d30 fix: saveConfig ne sauvegarde plus les IDs dans le YAML
Problème : les IDs étaient sauvegardés dans config.yaml alors qu'ils doivent être générés dynamiquement.

Solution :
- saveConfig() nettoie maintenant les IDs avant sauvegarde
- Suppression récursive des 'id' pour groupes et canaux
- config.yaml restauré sans IDs (format propre)
- Les IDs sont uniquement en mémoire après loadConfig()

Garantit :
- config.yaml reste lisible et maintenable
- Pas de conflit d'IDs
- Source de vérité = nom du groupe/canal
- IDs cohérents et prévisibles (slugify)
2026-05-24 22:29:59 +02:00
benoit 6e9dd738d7 fix: correction édition/suppression groupes avec IDs générés dynamiquement
Problème : l'édition et la suppression de groupes ne fonctionnaient pas car les IDs n'étaient pas persistés dans le YAML.

Solution :
- loadConfig() génère maintenant les IDs à chaque chargement (slugify du nom)
- PUT /admin/groups/:id cherche le groupe par nom slugifié au lieu de l'ID
- DELETE /admin/groups/:id idem
- Les IDs ne sont jamais sauvegardés dans config.yaml (source de vérité = nom)
- Rechargement après mise à jour pour renvoyer les IDs corrects au client

Comportement :
- Création : génère l'ID depuis le nom
- Édition : trouve le groupe par son nom slugifié, sauvegarde sans ID, recharge
- Suppression : trouve le groupe par son nom slugifié
- Les IDs restent cohérents entre les rechargements
2026-05-24 22:28:43 +02:00
benoit a0839ed563 refactor: simplification structure des groupes
Simplification majeure de la configuration des groupes :
- Suppression des champs redondants 'id' et 'description'
- Le nom du groupe sert maintenant d'identifiant (converti en slug automatiquement)
- Génération automatique des IDs pour groupes et canaux via fonction slugify()

Backend (server/) :
- Ajout fonction slugify() pour génération d'IDs à partir des noms
- Génération automatique des IDs au chargement de la config (index.js)
- API admin adaptée : POST/PUT /admin/groups génèrent les IDs automatiquement
- Pas besoin de fournir l'ID lors de la création/modification

Frontend (client/src/Admin.jsx + Admin.css) :
- Suppression champs ID et description du formulaire
- Simplification interface : nom + bitrate + canaux
- Mise à jour layout CSS canal (4 colonnes au lieu de 5)
- Cartes de groupe épurées (plus d'affichage d'ID)

Configuration (config.yaml) :
- Format simplifié : groupes avec 'name', 'channels' et 'audioBitrate' optionnel
- Exemple : "Production" au lieu de id/name/description séparés
- Plus lisible et maintenable

Les IDs sont générés dynamiquement :
- Groupe "Production" → id: "production"
- Canal "Principal" → id: "production-principal"

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-24 20:32:24 +02:00
benoit 637cc3e3a7 feat: interface admin complète pour gestion système (Phase 2.3)
Implémentation complète de l'interface d'administration web :

Backend (server/api/admin.js) :
- Endpoints CRUD pour gestion des groupes (GET/POST/PUT/DELETE /admin/groups)
- Gestion utilisateurs connectés en temps réel (GET/DELETE /admin/users)
- Monitoring statistiques système (GET /admin/stats)
- Affichage logs serveur avec filtrage (GET /admin/logs)
- Configuration audio globale (PUT /admin/config/audio)
- Système de tracking des connexions/déconnexions
- Export fonctions registerUser, unregisterUser, addLog

Frontend (client/src/Admin.jsx + Admin.css) :
- Interface admin complète avec 4 onglets (Groupes, Utilisateurs, Stats, Logs)
- Gestion groupes : création, modification, suppression avec formulaires
- Gestion canaux audio par groupe (inputs/outputs)
- Liste utilisateurs connectés avec déconnexion forcée
- Dashboard statistiques temps réel (connexions, uptime, mémoire)
- Viewer logs avec code couleur par niveau (debug/info/warn/error)
- Rafraîchissement auto toutes les 3s
- Design responsive et mode sombre

Intégration système :
- Routes admin montées sous /admin dans index.js
- Enregistrement automatique des utilisateurs lors de la génération de token
- Logs serveur centralisés dans le système admin
- Routing simple frontend pour /admin (main.jsx)

🎛️ Interface accessible via https://localhost:5173/admin

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

Co-Authored-By: Claude <noreply@anthropic.com>
2026-05-24 20:13:20 +02:00