Ajouter le modèle de lecture et le DAO de l’enquête #28
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?
Ticket #027 — Ajouter le modèle de lecture et le DAO de l’enquête
Contexte
Les tickets précédents ont permis de mettre en place :
Database;DatabaseStatement;La table SQLite :
contient les informations principales de l’enquête courante :
Le projet possède déjà un type :
dans le module
core.Cet objet représente actuellement le contexte de travail sur le système de
fichiers :
Il ne doit pas être transformé directement en représentation d’une ligne SQL.
L’architecture du projet prévoit une séparation entre :
Le DAO doit être responsable des requêtes SQL métier.
Objectif
Créer un modèle de données en lecture seule représentant la ligne de la table
investigation, ainsi qu’un DAO permettant de charger cette ligne depuis une
connexion Database.
Le ticket doit permettre de lire les informations persistées d’une enquête
sans utiliser directement l’API SQLite hors de la couche Database.
Architecture attendue
Travail à réaliser
Créer le modèle InvestigationRecord
Créer les fichiers :
Le modèle doit être opaque :
Sa représentation privée doit contenir :
Le modèle ne doit dépendre ni de SQLite, ni de GTK.
Ajouter le constructeur
Créer une fonction :
Le constructeur doit :
NULL;NULLsi les données sont invalides.Ajouter la fonction de libération
Créer :
Cette fonction doit :
NULL;Ajouter les accesseurs
Créer les accesseurs en lecture seule :
Les pointeurs retournés appartiennent au modèle et ne doivent pas être libérés.
Les accesseurs doivent retourner
NULLsi le modèle reçu estNULL.Créer le DAO de l’enquête
Créer les fichiers :
Déclarer la fonction :
Cette fonction doit charger l’unique ligne de la table :
La requête doit lire :
Utiliser exclusivement DatabaseStatement
Le DAO doit utiliser :
Le DAO ne doit pas utiliser directement :
Aucun type SQLite ne doit apparaître dans l’interface publique du DAO.
Vérifier le nombre de lignes
La base d’une enquête doit contenir exactement une ligne dans la table
investigation.Le DAO doit gérer les cas suivants :
Une ligne
Résultat :
Le DAO construit et retourne un
InvestigationRecord.Aucune ligne
DONEdès le premier stepRésultat :
Le DAO retourne
NULLet enregistre :Plusieurs lignes
Résultat :
échecLe DAO libère le modèle temporaire, retourne
NULLet enregistre :Propager les erreurs
Les erreurs de préparation ou d’exécution provenant de
DatabaseStatementdoivent rester disponibles dans le contexte
Database.Le DAO doit enregistrer une erreur explicite pour :
Les codes prévus sont :
Une lecture réussie doit laisser :
Gérer proprement la mémoire
Le DAO doit libérer toutes les chaînes temporaires retournées par :
après la construction du modèle.
Toutes les sorties d’échec doivent :
Test du modèle
Créer :
Vérifier :
NULL;investigation_record_free(NULL).Test du DAO
Créer :
Créer une base temporaire avec :
Puis :
database_open();investigation_dao_load();NULL;created_at;updated_at;DATABASE_ERROR_NONE.Paramètre invalide
Vérifier :
Table vide
Créer une base contenant la table investigation sans ligne.
Vérifier :
Plusieurs lignes
Créer une base contenant deux lignes dans la table investigation.
Vérifier :
Données invalides
Créer une situation dans laquelle une colonne obligatoire ne peut pas être
correctement lue.
Vérifier :
Makefile
Ajouter les exécutables :
Ajouter leurs règles de compilation.
Les tests du DAO devront notamment compiler avec :
Ajouter les nouveaux tests aux cibles :
Critères d’acceptation
InvestigationRecordest opaque.investigation_dao_load()charge l’enquête courante.DatabaseStatement.Database.makeréussit sans erreur.make testréussit.git diff --checkne retourne aucune erreur.Hors périmètre
Ce ticket ne doit pas ajouter :
Fichiers principalement concernés
Résultat attendu
À la fin du ticket, le projet doit être capable de charger les informations
persistées de l’enquête courante dans un modèle C indépendant de SQLite.
Le DAO devient le premier point d’accès métier structuré à la base de données.
Commit attendu
Une fois tous les critères validés :
feat(dao): add investigation record loaderAvant le commit :