Associer les relations aux preuves #56
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?
Associer les relations aux preuves
Contexte
Une relation entre deux entités ne doit pas être considérée comme fiable sans
pouvoir indiquer les éléments qui la justifient.
Exemples :
e-mail ;
Les modèles et DAO suivants existent désormais :
EvidenceRecordetEvidenceDao;EntityRecordetEntityDao;RelationRecordetRelationDao;EvidenceEntityDaopour les associations entre preuves et entités.La table SQLite
relation_preuvesexiste déjà dans le schéma V1. Ellecontient une clé primaire composée de
relation_idetpreuve_id, ainsi quedes clés étrangères vers
relationsetpreuves.Objectif
Ajouter un DAO spécialisé permettant de créer, consulter et supprimer les
associations entre les relations et les preuves qui les justifient.
Le composant doit rester indépendant de GTK et du futur graphe interactif.
Nom du composant
Créer :
Le type public doit être nommé :
Le DAO emprunte une connexion
Databaseexistante. Il ne doit ni ouvrir unenouvelle connexion ni fermer la connexion reçue.
Choix d'architecture
RelationEvidenceDaoreprésente uniquement l'association entre deux UUID.Il ne doit pas reconstruire directement des
RelationRecordou desEvidenceRecord, afin de ne pas dupliquer la logique de lecture déjà présentedans
RelationDaoetEvidenceDao.Les méthodes de liste doivent donc retourner des tableaux d'UUID :
La couche applicative pourra ensuite charger les modèles complets à l'aide des
DAO spécialisés.
API publique
Domaine d'erreur
Créer :
Ajouter :
RELATION_EVIDENCE_DAO_ERROR_NOT_FOUNDdoit pouvoir signaler :Construction
La fonction doit :
NULL;GError **facultatif.Destruction
La fonction doit :
NULL;Databaseempruntée.Création d'une association
La fonction doit :
INSERT OR REPLACE,REPLACEou un upsert ;Une relation ou une preuve inexistante doit produire
RELATION_EVIDENCE_DAO_ERROR_NOT_FOUND.Un doublon doit produire
RELATION_EVIDENCE_DAO_ERROR_CONSTRAINT.Suppression d'une association
La fonction doit :
relation_preuves;RELATION_EVIDENCE_DAO_ERROR_NOT_FOUNDlorsque l'associationn'existe pas ;
Vérification d'existence
La fonction doit :
out_exists;TRUElorsque la requête a été exécutée correctement ;TRUEouFALSEdansout_exists;Liste des preuves d'une relation
Le tableau doit :
g_free()comme fonction de destruction ;La méthode ne doit pas charger de
EvidenceRecord.Liste des relations d'une preuve
Le tableau doit :
g_free()comme fonction de destruction ;La méthode ne doit pas charger de
RelationRecord.Requêtes SQL attendues
Le DAO doit utiliser des requêtes préparées pour :
Toutes les requêtes doivent utiliser des paramètres liés. Aucun UUID ne doit
être concaténé dans une chaîne SQL.
Tous les
DatabaseStatementdoivent être finalisés sur chaque chemin desortie, y compris après :
Propriété mémoire
Le DAO :
Database;RelationRecord;EvidenceRecord.Les tableaux retournés :
g_free()pour détruire ces chaînes.Tests
Créer :
Les tests doivent utiliser une base SQLite temporaire initialisée avec le
schéma réel de l'application.
Ils doivent utiliser les DAO existants pour insérer les entités, relations et
preuves nécessaires, sauf lorsqu'une insertion SQL directe est précisément
destinée à tester une contrainte du schéma.
Scénarios minimaux
NULL;relation_evidence_dao_free(NULL);exists();FALSEdeexists()lorsque l'association est absente ;out_existsabsent ;relation_preuvesabsente ;ON DELETE RESTRICTpour une preuve associée ;unlink();unlink();GError **facultatif sur les erreurs prévues ;Les avertissements SQLite déclenchés volontairement par les tests de
contraintes doivent être déclarés avec :
La sortie normale du test doit rester propre.
Makefile
Ajouter :
Ajouter une cible dédiée compilant uniquement :
tests/test_relation_evidence_dao.c;src/dao/relation_evidence_dao.c;databasenécessaires.La cible ne doit inclure aucun autre fichier
tests/test_*.c, afin d'éviterplusieurs définitions de
main().Ajouter
$(TEST_RELATION_EVIDENCE_DAO):make test;make test;make clean.La compilation doit conserver :
Hors périmètre
Ce ticket ne couvre pas :
Une évolution future du schéma pourra ajouter une qualification de la preuve,
par exemple :
Cette évolution ne doit pas être anticipée dans ce ticket puisque la table
actuelle ne contient que
relation_idetpreuve_id.Critères d'acceptation
RelationEvidenceDaoest opaque.Database.NOT_FOUND.exists()différencie correctement absence et erreur.ON DELETE RESTRICTsont testés.make clean && make && make testréussit.git diff --checkne retourne aucune erreur.