Persister la position des nœuds du graphe #66
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Persister la position des nœuds du graphe
Contexte
La vue graphique permet actuellement :
Les positions des nœuds restent uniquement en mémoire et sont perdues à la fermeture de l’application.
Objectif
Enregistrer les positions des nœuds dans la base SQLite de l’enquête et les restaurer automatiquement lors du prochain chargement.
Version du schéma
La version courante reste :
Pourquoi ne pas modifier uniquement schema_v2.sql
Une base déjà enregistrée avec :
ne rejoue pas la migration V1 vers V2.
Ajouter uniquement la nouvelle table à
schema_v2.sqlne mettrait donc à jour que les nouvelles bases et les anciennes bases V1.Les bases V2 existantes resteraient privées de la table de positions.
Extension idempotente du schéma courant
Créer :
Ce fichier contient uniquement des opérations pouvant être rejouées sans erreur :
Les coordonnées sont un état de présentation et ne doivent pas être ajoutées à
entites.Aucun index supplémentaire n’est nécessaire : la clé primaire sur
entity_idcrée déjà l’index utile.Installation du schéma courant
Ajouter dans
schema.h:Ajouter dans
schema.c:La connexion doit être ouverte et une transaction doit déjà être active.
La fonction ne réalise ni
COMMITniROLLBACK.Nouvelles bases
Dans
database_initialize():schema_ensure_current();La version enregistrée reste
2.Bases existantes
Dans
database_migrate_to_latest():schema_ensure_current();schema_version = 2.Une base déjà en V2 recevra ainsi la table manquante sans changement de version.
L’opération doit être rejouable à chaque ouverture grâce à
CREATE TABLE IF NOT EXISTS.Modèle de position
Créer :
API minimale :
Le modèle possède ses chaînes.
Les UUID vides,
NaNet les valeurs infinies doivent être refusés.DAO des positions
Créer :
API minimale :
L’UPSERT doit utiliser une requête préparée :
Aucune donnée utilisateur ne doit être concaténée dans du SQL.
Modèle de disposition
Créer :
Responsabilités :
API indicative :
Chargement
Lors de l’ouverture d’une enquête :
InvestigationGraphLayout;Une entité sans position persistée conserve le placement automatique actuel.
Notification de déplacement
Ajouter à
InvestigationGraphView:Le callback doit être déclenché uniquement à la fin d’un déplacement réel de nœud.
Il ne doit pas être appelé :
drag-update;Coordination
Aucun widget ne doit accéder directement à SQLite.
Gestion des erreurs
En cas d’échec d’enregistrement :
Hors périmètre
Ce ticket n’inclut pas :
L’enrichissement des fiches sera traité après la persistance.
Tests du schéma
graph_node_positions.Tests fonctionnels
Critères d’acceptation
DATABASE_SCHEMA_VERSION_CURRENTreste à 2.entites.make clean && makeréussit avec-Werror -Wpedantic.make testréussit.git diff --checkne signale aucune erreur.Ordre d’implémentation
schema_current.sql.schema_ensure_current().GraphNodePosition.InvestigationGraphLayout.Application.