Ajouter le modèle de graphe d'enquête en mémoire #58
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?
Ajouter le modèle de graphe d'enquête en mémoire
Contexte
Les composants métier et de persistance suivants existent désormais :
EntityRecordetEntityDao;RelationRecordetRelationDao;RelationEvidenceDao;RelationService.SQLite reste la source de vérité de l'enquête.
Le futur tableau blanc interactif devra représenter :
L'interface GTK ne doit toutefois pas travailler directement avec les DAO ni
reconstruire elle-même les index du graphe.
Une représentation métier en mémoire est donc nécessaire entre la couche de
persistance et la future vue graphique.
Objectif
Créer un modèle
InvestigationGraphModelcapable de posséder et d'indexer enmémoire :
EntityRecord;RelationRecord;Le modèle doit être indépendant :
Il ne représente que la structure métier du graphe.
Fichiers
Créer :
Type opaque
Domaine d'erreur
Créer :
Ajouter :
Construction
Le constructeur doit créer un graphe vide possédant ses structures internes.
Destruction
La destruction doit :
NULL;free.Propriété des modèles
Entités
En cas de succès :
entity_record;En cas d'échec :
entity_record.La fonction doit :
NULL;NULL;Relations
En cas de succès :
relation_record;En cas d'échec :
relation_record.La fonction doit :
NULL;NULL;Les entités doivent donc être ajoutées avant leurs relations.
Recherche directe
Entité
La fonction doit :
NULLpour un graphe absent ;NULLpour un UUID invalide ;NULLlorsque l'entité n'existe pas ;Relation
Les mêmes règles de propriété et de validation s'appliquent.
Comptage
Ajouter :
Un graphe
NULLdoit retourner0.Listes globales
Entités
Le tableau doit :
const EntityRecord *empruntés ;Relations
Le tableau doit :
const RelationRecord *empruntés ;Navigation du graphe
Relations sortantes
Le tableau doit contenir les relations dont :
Relations entrantes
Le tableau doit contenir les relations dont :
Relations incidentes
Le tableau doit contenir :
Les trois méthodes doivent :
ENTITY_NOT_FOUNDsi l'entité n'existe pas ;Structures internes attendues
L'implémentation doit utiliser des index permettant d'éviter de parcourir
toutes les relations pour chaque requête.
Une architecture possible est :
L'implémentation exacte reste libre, mais les recherches directes doivent être
effectuées par index.
Les index peuvent être basés sur
GHashTable.Cohérence métier
Le modèle doit garantir les invariants suivants :
Le modèle ne doit pas modifier les statuts ou le contenu des
EntityRecordetRelationRecord.Tests
Créer :
Scénarios minimaux
NULL;NULL;NULL;ENTITY_NOT_FOUNDpour une entité absente ;NULL;Makefile
Ajouter :
Ajouter une cible dédiée compilant uniquement :
tests/test_investigation_graph_model.c;src/models/investigation_graph_model.c;src/models/entity_record.c;src/models/relation_record.c.Aucun module GTK ou SQLite ne doit être nécessaire pour ce test.
Ajouter
$(TEST_INVESTIGATION_GRAPH_MODEL):make test;make test;make clean.La compilation doit conserver :
Hors périmètre
Ce ticket ne couvre pas :
Le chargement du graphe depuis
EntityDaoetRelationDaofera l'objet duticket suivant.
Critères d'acceptation
InvestigationGraphModelest opaque.make clean && make && make testréussit.git diff --checkne retourne aucune erreur.