Persister la position des nœuds de relation dans le graphe #69

Closed
opened 2026-07-22 10:00:35 +02:00 by fy59 · 0 comments
Owner

Persister la position des nœuds de relation dans le graphe

Description :

Contexte

La vue graphique représente désormais les relations sous forme de nœuds
intermédiaires entre deux entités.

Ces nœuds peuvent être déplacés, mais la table historique
graph_node_positions référence exclusivement entites(id). Leur position
est donc perdue lors du rechargement du graphe.

Le système de compilation ne suit pas non plus les dépendances entre les
fichiers sources et les en-têtes.

Objectifs

  • permettre la persistance des positions des entités et des relations ;
  • préserver les positions enregistrées dans les enquêtes existantes ;
  • éviter les positions orphelines ;
  • employer un vocabulaire générique de « nœud » dans l’API ;
  • fiabiliser les compilations incrémentales ;
  • documenter la décision d’architecture SQLite.

Travaux prévus

  • ajouter une table générique graph_layout_positions ;
  • migrer automatiquement les anciennes positions d’entités ;
  • empêcher la réimportation de positions obsolètes après une réinitialisation ;
  • nettoyer les positions lors de la suppression physique d’une entité ou
    d’une relation ;
  • adapter GraphNodePosition, son DAO et la disposition du graphe ;
  • notifier les déplacements des nœuds de relation ;
  • ajouter les dépendances GCC -MMD -MP au Makefile ;
  • adapter les tests du DAO ;
  • documenter le stockage générique dans l’architecture de la base.

Décision technique

SQLite ne permet pas de définir une clé étrangère polymorphe vers
entites(id) ou relations(id).

La table générique conserve donc l’UUID du nœud sans clé étrangère directe.
Deux triggers assurent le nettoyage des positions lors de la suppression
physique de leur objet d’origine.

La table historique est conservée pour permettre une migration idempotente
des enquêtes existantes.

Critères d’acceptation

  • une position d’entité peut être enregistrée et rechargée ;
  • une position de relation peut être enregistrée sans ligne correspondante
    dans entites ;
  • les anciennes positions sont migrées automatiquement ;
  • la réinitialisation ne restaure pas d’anciennes coordonnées ;
  • la suppression d’une entité ou relation nettoie sa position ;
  • les dépendances aux en-têtes sont suivies par Make ;
  • la décision SQLite est documentée ;
  • le projet compile sans avertissement ;
  • tous les tests passent ;
  • git diff --check ne signale aucune erreur.

Vérifications

make -B -j2 all
make test
git diff --check
# Persister la position des nœuds de relation dans le graphe Description : ## Contexte La vue graphique représente désormais les relations sous forme de nœuds intermédiaires entre deux entités. Ces nœuds peuvent être déplacés, mais la table historique `graph_node_positions` référence exclusivement `entites(id)`. Leur position est donc perdue lors du rechargement du graphe. Le système de compilation ne suit pas non plus les dépendances entre les fichiers sources et les en-têtes. ## Objectifs - permettre la persistance des positions des entités et des relations ; - préserver les positions enregistrées dans les enquêtes existantes ; - éviter les positions orphelines ; - employer un vocabulaire générique de « nœud » dans l’API ; - fiabiliser les compilations incrémentales ; - documenter la décision d’architecture SQLite. ## Travaux prévus - ajouter une table générique `graph_layout_positions` ; - migrer automatiquement les anciennes positions d’entités ; - empêcher la réimportation de positions obsolètes après une réinitialisation ; - nettoyer les positions lors de la suppression physique d’une entité ou d’une relation ; - adapter `GraphNodePosition`, son DAO et la disposition du graphe ; - notifier les déplacements des nœuds de relation ; - ajouter les dépendances GCC `-MMD -MP` au Makefile ; - adapter les tests du DAO ; - documenter le stockage générique dans l’architecture de la base. ## Décision technique SQLite ne permet pas de définir une clé étrangère polymorphe vers `entites(id)` ou `relations(id)`. La table générique conserve donc l’UUID du nœud sans clé étrangère directe. Deux triggers assurent le nettoyage des positions lors de la suppression physique de leur objet d’origine. La table historique est conservée pour permettre une migration idempotente des enquêtes existantes. ## Critères d’acceptation - [x] une position d’entité peut être enregistrée et rechargée ; - [x] une position de relation peut être enregistrée sans ligne correspondante dans `entites` ; - [x] les anciennes positions sont migrées automatiquement ; - [x] la réinitialisation ne restaure pas d’anciennes coordonnées ; - [x] la suppression d’une entité ou relation nettoie sa position ; - [x] les dépendances aux en-têtes sont suivies par Make ; - [x] la décision SQLite est documentée ; - [x] le projet compile sans avertissement ; - [x] tous les tests passent ; - [x] `git diff --check` ne signale aucune erreur. ## Vérifications ```sh make -B -j2 all make test git diff --check
fy59 closed this issue 2026-07-22 10:00:52 +02:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: fy59/labfy-investigation#69
No description provided.