- Lire intégralement ce document au démarrage de chaque nouvelle tâche et l’utiliser comme seule source de contexte persisté.
- Considérer les sections « Vue d’ensemble », « Installation & exécution », « Périmètre fonctionnel » et « Architecture » avant toute modification de code ou analyse.
- Mettre à jour ce fichier dès qu’une information de référence change afin d’éviter toute dépendance à d’autres fichiers de notes.
MyWebClient est l’interface web du projet MyWebIntelligencePython. Elle permet de nettoyer, organiser et analyser les données collectées par la pipeline Python. L’application repose sur deux services qui tournent simultanément :
- Client ReactJS : interface utilisateur (navigation, édition d’expressions, tagging, sélection de base de données).
- Serveur Node.js/Express : API qui lit/écrit dans la base SQLite générée par MyWebIntelligencePython.
- Une base SQLite
mwi.dbgénérée via MyWebIntelligencePython est indispensable. Fournir ce fichier au backend (montage Docker ou chemin local) avant utilisation. - Node.js 14+ et Yarn si vous exécutez le projet depuis les sources.
- Docker Desktop si vous optez pour l’exécution containerisée.
- Cloner le dépôt :
git clone https://github.com/MyWebIntelligence/MyWebClient.git cd MyWebClient - Construire l’image :
docker build -t mwiclient:1.0 . - Démarrer le conteneur en important la base de données MyWebIntelligence :
docker run -p 80:3000 -p 5001:5001 \ --name mwiclient \ -v /chemin/vers/vos/donnees/mywi:/data \ [-e ADMIN_PASSWORD=motdepasse] \ [-e RESEND_API_KEY=cle_resend] \ mwiclient:1.0
- Adapter
/chemin/vers/vos/donnees/mywipour viser le dossier qui contientmwi.db. À l’intérieur du conteneur, l’application recherche la base sous/data/mwi.db. RESEND_API_KEYest optionnelle : si absente, le backend démarre et désactive simplement l’envoi d’e-mails (mot de passe oublié renvoie 501).
- Adapter
- Accéder au client via
http://localhost(port 80 exposé par défaut).
- Installer les dépendances (client + serveur) :
yarn install
- Fournir le chemin vers la base
mwi.dbdans la configuration (via UI DatabaseLocator ou variables d’environnement si nécessaire). - Lancer le mode standalone (client + serveur) :
yarn standalone
- Pour des environnements séparés, utiliser respectivement
yarn start(client) etyarn server(backend).
ADMIN_PASSWORD(optionnel, utilisé uniquement lors de la première initialisation pour définir le mot de passe admin).RESEND_API_KEY(optionnel, active l’envoi d’e-mails de récupération de mot de passe via Resend).- Tout mot de passe généré automatiquement est journalisé au démarrage et stocké dans
admin_password.txtà la racine du projet (ou/app/admin_password.txtdans Docker).
- Si aucun mot de passe n’est fourni lors du premier lancement,
server/src/initAdmin.jsgénère un mot de passe sécurisé, l’affiche dans les logs de démarrage et l’écrit dansadmin_password.txtsous la formeadmin:motdepasse. - Pour retrouver le mot de passe en mode local :
cat admin_password.txt
- Pour Docker :
ou consulter
docker exec mwiclient cat /app/admin_password.txtdocker logs mwiclient.
- Lister les conteneurs actifs :
docker ps - Arrêter / démarrer le conteneur :
docker stop mwiclient,docker start mwiclient - Consulter les logs :
docker logs mwiclient
- Déclencheur : soumission du formulaire
Login. - Client :
handleSubmitenvoiePOST /api/auth/login, stocke le token et appelleonLogin. - Serveur :
POST /api/auth/loginvalide les identifiants viaAdminDB, met à jour la session et renvoie{ success, token, user }. - Résultat : passage à l’espace applicatif authentifié.
- Déclencheur : sélection dans
ExpressionExplorer, actions d’édition ou de navigation. - Client : appels
getExpression,getReadable,saveReadable,deleteExpression,tagContent,getTaggedContent,getPrevExpression,getNextExpression,deleteMedia(Context.js). - Serveur : routes correspondantes
/api/expression,/api/readable,/api/deleteExpression,/api/tagContent,/api/taggedContent,/api/prev,/api/next,/api/deleteMedia. - Résultat : consultation, édition, sauvegarde, tagging et navigation en temps réel.
- Déclencheur :
LandExplorer(changement de land, sliders de filtres). - Client :
getLand,getExpressions,setCurrentRelevance,setCurrentDepth, pagination (setCurrentPage,setResultsPerPage). - Serveur :
GET /api/land,GET /api/expressions. - Résultat : exploration filtrée des expressions d’un land.
- Déclencheur : actions dans
TagExplorerou tagging depuisExpression. - Client :
getTags,setTags,updateTag,tagContent,getTaggedContent,deleteTaggedContent. - Serveur :
GET /api/tags,POST /api/tags,POST /api/updateTag,POST /api/tagContent,GET /api/taggedContent,GET /api/deleteTaggedContent. - Résultat : gestion de la taxonomie et du contenu taggé.
- Déclencheur :
DatabaseLocator(choix d’un fichier SQLite). - Client :
setDbviaGET /api/connect?db=...suivi du chargement initial des données. - Serveur :
GET /api/connectconnecte le backend à la base spécifiée. - Résultat : initialisation de l’UI avec les données.
- Déclencheur : navigation dans
Domain. - Client :
getDomain(Context.js). - Serveur :
GET /api/domain. - Résultat : consultation des métadonnées d’un domaine.
- Déclencheur : suppression d’un média dans
Expression. - Client :
deleteMedia(POST /api/deleteMedia). - Serveur :
POST /api/deleteMediasupprime le média associé. - Résultat : média supprimé, UI mise à jour.
-
client/ : Frontend React (interface utilisateur)
- src/
- index.js : Point d’entrée React
- serviceWorker.js : Gestion du service worker (PWA)
- setupTests.js : Setup des tests
- app/
- Context.js : Contexte global de configuration (ConfigContext)
- Util.js : Fonctions utilitaires (ex :
delay)
- components/
- App/ : Composant principal
App,MainApp, gestion login - DatabaseLocator/ : Sélection de la base de données
- Domain/ : Gestion d’un domaine (
Domain) - ExpressionExplorer/ : Gestion des expressions (
Expression,ExpressionExplorer) - LandExplorer/ : Exploration des “lands” (
LandExplorer,FilterSlider,LandFilters) - TagExplorer/ : Exploration des tags (
TagExplorer,TagRenderer,TaggedContent,TreeRenderer)
- App/ : Composant principal
- src/
-
server/ : Backend Node.js (API, logique métier)
- src/
- AdminDB.js : Gestion des utilisateurs/admins, logs, tentatives, tokens, accès
- DataQueries.js : Fonctions SQL pour manipuler les données (expressions, tags, etc.)
- initAdmin.js : Création de l’admin initial, génération de mot de passe
- authRoutes.js : Routes d’authentification (login, reset, etc.)
- migrations_auth.sql : Script SQL de migration
- start.js : Point d’entrée serveur
- src/
-
Divers
- package.json / yarn.lock : Dépendances
- Dockerfile / Dockerfile.prod : Conteneurisation
- docker-compose.yml / docker-compose.prod.yml : Orchestration multi-services
- README.md : Documentation générale du projet
- admin_password.txt : Cache le mot de passe admin généré
register(config): Enregistre le service worker (PWA)unregister(): Désenregistre le service worker
ConfigContext(class) : Fournit le contexte global de configurationtagsHaveChanged(a, b, d): Compare des tags
delay(time, callback, arg): Exécute un callback après un délai
MainApp(): Ancien contenu deApp, logique principaleApp(): Composant principal, gère l’état global et le loginhandleLogin(userData): Callback de connexion
DatabaseLocator(): Permet à l’utilisateur de choisir une base de données
Domain(props): Affiche et gère un domaine
Expression(props): Affiche et édite une expression- Fonctions internes :
saveBeforeQuit,onTextChange,selectText,deleteExpression,getReadable,saveReadable,reloadExpression,deleteMedia
- Fonctions internes :
ExpressionExplorer(): Liste et navigue entre les expressions- Fonctions internes :
setPrevPage,setNextPage,groupSelect,checkSelected,dropSelected,sortHint
- Fonctions internes :
LandExplorer(): Affiche et gère l’exploration des “lands”switchLand(event): Change de “land”
FilterSlider({ label, min, max, defaultValue, apply }): Slider de filtrehandleChange(event): Gère le changement de valeur
LandFilters(): Filtres pour les “lands”onChangeRelevance(value),onChangeDepth(value): Gèrent les filtres
TagExplorer(): Affiche et gère l’exploration des tags- Fonctions internes :
getNodeKey,handleClose
- Fonctions internes :
TagRenderer(props): Affiche un tag
TaggedContent({ tags, forLand }): Affiche le contenu taggé- Fonctions internes :
handleClose,handleShow,deleteTaggedContent,getFiltered
- Fonctions internes :
TreeRenderer(class) : Affiche l’arbre des tagsrender(): Rendu de l’arbre
Login({ onLogin }),ForgotPassword(),ResetPassword(): Composants d’authentification- Fonctions internes :
handleSubmit,toggleShowPassword
- Fonctions internes :
connectAdminDB(dbPath): Connexion à la base adminaddUser(user, callback): Ajoute un utilisateurincrementFailedAttempts(userId, maxAttempts, callback): Incrémente les tentatives échouéesresetFailedAttempts(userId, callback): Réinitialise les tentativesfindUser(identifier, callback): Recherche un utilisateurupdateLastSession(userId, callback): Met à jour la dernière sessionaddAccessLog(log, callback): Ajoute un log d’accèssetUserBlocked(userId, blocked, until, callback): Bloque/débloque un utilisateurgetAccessLogs(userId, callback): Récupère les logs d’accèssetResetToken(email, token, expires, callback): Définit un token de resetfindUserByResetToken(token, callback): Recherche un utilisateur par tokenresetPassword(userId, newHash, callback): Réinitialise le mot de passe
placeholders(params): Génère des placeholders SQLgetSiblingExpression(offset, req, res): Récupère une expression voisinenormPath(filename): Normalise un cheminbuildTagTree(rows): Construit l’arbre des tagswalk(tags, parentId): Parcours récursif des tags
generatePassword(length): Génère un mot de passelogPassword(pwd): Log le mot de passecreateAdminIfNeeded(): Crée l’admin si besoin
flowchart TD
subgraph Frontend
App --> Login
App --> MainApp
MainApp --> DatabaseLocator
MainApp --> Domain
MainApp --> ExpressionExplorer
MainApp --> LandExplorer
MainApp --> TagExplorer
ExpressionExplorer --> Expression
LandExplorer --> FilterSlider
LandExplorer --> LandFilters
TagExplorer --> TagRenderer
TagExplorer --> TaggedContent
TagExplorer --> TreeRenderer
end
subgraph Backend
startJS((start.js)) --> authRoutes
authRoutes --> AdminDB
authRoutes --> DataQueries
initAdmin --> AdminDB
end
App <-->|"API calls"| Backend
Ce fichier est la source de vérité pour les agents. Il décrit l’objectif produit, les procédures d’installation, les pipelines fonctionnels clés, l’architecture et les responsabilités par fichier. Mettre à jour cette page dès qu’une information critique évolue afin de conserver un contexte unique et à jour.