Initialiser la base SQLite d'une enquête. #23
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?
Titre
Initialiser la base SQLite d'une enquête.
Objectif
Créer et initialiser correctement le fichier :
avec un premier schéma SQLite versionné.
La base doit contenir les métadonnées minimales permettant d'identifier
l'enquête et la version du schéma.
Architecture
InvestigationProjectorchestre la création de l'enquête.Le module
Databaseest seul responsable de l'ouverture de SQLite,de l'exécution du schéma et de la fermeture de la base.
Responsabilités
InvestigationProject
Le module doit :
Databased'initialiserEnquete.sqlite;Database
Le module doit :
Nouveaux fichiers
Éventuellement :
si le schéma devient trop volumineux pour rester dans
database.c.Pour ce ticket, un seul module
database.cest acceptable.Interface publique attendue
La fonction retourne :
si la base a été correctement initialisée.
Elle retourne :
en cas d'erreur.
Schéma initial
Table
metadataMétadonnées obligatoires
Valeurs attendues :
Exemple :
Table
investigationCréer également une table minimale représentant l'enquête :
La table contient une seule ligne correspondant à l'enquête courante.
Données nécessaires
database_initialize()doit recevoir suffisamment d'informations pourinitialiser correctement la base.
L'interface pourra donc évoluer vers :
Cette signature est préférée pour éviter que le module
Databasereconstruise ou devine des informations métier.
UUID
L'UUID doit être généré avec GLib :
La chaîne retournée doit être libérée avec :
Date de création
La date doit être produite en UTC avec GLib.
Format attendu :
La date doit être enregistrée à la fois :
metadata.created_at;investigation.created_at.Transaction
Toute l'initialisation doit se dérouler dans une transaction :
Puis :
En cas d'erreur :
Une base partiellement initialisée ne doit jamais être considérée comme valide.
Intégration avec InvestigationProject
investigation_project_create()ne doit plus créer un fichier vide avec :Il doit construire le chemin de la base puis appeler :
Si l'appel échoue :
investigation_project_create()retourneNULL.Validation
À partir de ce ticket,
investigation_project_validate()doit toujoursvérifier la présence du fichier SQLite, mais pas encore son contenu SQL.
La validation du schéma sera ajoutée dans un prochain ticket dédié.
Hors périmètre
Ce ticket ne doit pas :
sqlite3 *hors du module Database.Contraintes techniques
database.c;Tests
Créer :
Le test doit :
metadata;investigation;schema_version = 1;application = Labfy Investigation;created_atn'est pas vide ;investigation;Faire également évoluer :
pour vérifier que la base créée n'est plus vide.
Critères d'acceptation
make testreste entièrement valide.Enquete.sqliteest une vraie base SQLite.metadataexiste.investigationexiste.schema_versionvaut1.sqlite3 *n'est exposé publiquement.Commit attendu