Les actions serveur de src/features/settings/actions.ts étaient appelables par n'importe quel utilisateur connecté : la restriction de /settings dans le middleware ne protège pas une action serveur. Un simple utilisateur pouvait lire l'URL PostgreSQL, le mot de passe Qlik et les clés IA, réécrire la configuration (puis refreshDb()), ou faire appeler une URL arbitraire au serveur via les boutons « Tester ». - requireAdmin() partagé dans src/lib/auth.ts, appelé en tête de chaque action des Paramètres ; il remplace les deux copies locales d'ensureAdmin() de user-actions.ts et api-key-actions.ts. - getSavedDatabaseConfig ne renvoie plus aucun secret : URL sans mot de passe, mot de passe Qlik et clés IA remplacés par des booléens has*. - Un mot de passe laissé vide conserve celui enregistré (enregistrement et test), uniquement pour le même hôte/utilisateur afin qu'il ne puisse pas être envoyé à un autre serveur. - saveDatabaseSettings n'écrase plus les clés et modèles IA quand la page n'envoie que l'URL (ils étaient effacés à chaque sauvegarde). - Le diagnostic de l'API FF passe dans lib/api-ff-client (diagnoseFfApi) : /api/ff-status reste accessible à tous sans exposer l'action admin. - Le mot de passe PostgreSQL n'est plus persisté dans le localStorage. Les routes /api/admin/** et sync-settings.ts (module serveur, pas une action) étaient déjà correctement protégées : inchangées. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RkfUui3qGg2zmu3uHWjNXJ
CollectFlow
CollectFlow est une application de révision d'assortiment et d'analyse de performances des produits en point de vente, conçue pour consolider les données issues de plusieurs fournisseurs et magasins.
Prérequis
- Node.js 18+ (pour le développement local)
- Docker et Docker Compose (pour le déploiement conteneurisé)
- PostgreSQL 16+
Lancer avec Docker
Le projet est configuré pour tourner dans un conteneur Docker optimisé (mode standalone de Next.js). Note : Vous devez disposer d'une base de données PostgreSQL séparée (le conteneur ne lance que l'application web).
1. Démarrer l'application
À la racine du projet, lancez :
npm run docker:build
# ou directement
docker-compose up -d --build
L'application sera accessible sur http://localhost:5643.
L'application sera attachée au réseau Docker externe nginx_default afin d'être exposée derrière votre reverse proxy Nginx. Assurez-vous que ce réseau existe (docker network create nginx_default).
2. Arrêter l'application
npm run docker:down
# ou directement
docker-compose down
Développement Local (Sans Docker)
Si vous préférez développer en local, vous devrez configurer votre propre base de données PostgreSQL.
- Installer les dépendances :
npm install
-
Configurer la connexion DB : Allez sur la page des Paramètres (
/settings) dans l'application pour configurer l'accès à votre PostgreSQL local. -
Lancer le serveur de développement :
npm run dev
Structure du Projet (BMAD)
Ce projet respecte l'architecture BMAD (Business, Model, Application/API, Data) :
src/features/*: Logique métier (Business) isolée par feature (ex:grid,snapshots)src/types/*: Interfaces TypeScript (Model)src/app/*: Routeurs Next.js UI et endpoints d'API (Application/API)src/db/*: Schémas Drizzle ORM et connexions (Data)