158 lines
2.6 KiB
Markdown
158 lines
2.6 KiB
Markdown
# Ticket #008
|
|
|
|
## Titre
|
|
|
|
Créer le module `InvestigationTreeModel`.
|
|
|
|
---
|
|
|
|
## Objectif
|
|
|
|
Créer une structure métier représentant le modèle de l'arborescence d'une enquête.
|
|
|
|
Le modèle sera propriétaire du nœud racine et servira de base au futur explorateur d'enquête.
|
|
|
|
---
|
|
|
|
## Responsabilités
|
|
|
|
Le module `InvestigationTreeModel` doit :
|
|
|
|
- posséder un nœud racine ;
|
|
- gérer le cycle de vie du modèle ;
|
|
- exposer le nœud racine en lecture seule.
|
|
|
|
---
|
|
|
|
## Hors périmètre
|
|
|
|
Ce ticket ne doit pas :
|
|
|
|
- parcourir le système de fichiers ;
|
|
- créer les enfants d'un nœud ;
|
|
- afficher une interface GTK ;
|
|
- communiquer avec SQLite ;
|
|
- charger une enquête.
|
|
|
|
---
|
|
|
|
## Architecture
|
|
|
|
```text
|
|
Investigation
|
|
│
|
|
▼
|
|
InvestigationTreeModel
|
|
│
|
|
▼
|
|
InvestigationNode
|
|
```
|
|
|
|
Le module appartient à la couche **Core**.
|
|
|
|
Aucune dépendance vers GTK.
|
|
|
|
---
|
|
|
|
## Principe de propriété
|
|
|
|
Le module est **propriétaire** du nœud racine.
|
|
|
|
À partir du moment où un `InvestigationNode` est transmis au constructeur :
|
|
|
|
```c
|
|
investigation_tree_model_new(root_node);
|
|
```
|
|
|
|
le modèle devient responsable de sa destruction.
|
|
|
|
Le code appelant ne doit plus appeler :
|
|
|
|
```c
|
|
investigation_node_free(root_node);
|
|
```
|
|
|
|
La destruction du modèle doit automatiquement détruire son nœud racine.
|
|
|
|
---
|
|
|
|
## Fichiers concernés
|
|
|
|
```text
|
|
include/core/investigation_tree_model.h
|
|
src/core/investigation_tree_model.c
|
|
```
|
|
|
|
---
|
|
|
|
## Interface publique attendue
|
|
|
|
```c
|
|
InvestigationTreeModel *investigation_tree_model_new(
|
|
InvestigationNode *root_node
|
|
);
|
|
|
|
void investigation_tree_model_free(
|
|
InvestigationTreeModel *tree_model
|
|
);
|
|
|
|
const InvestigationNode *investigation_tree_model_get_root(
|
|
const InvestigationTreeModel *tree_model
|
|
);
|
|
```
|
|
|
|
---
|
|
|
|
## Comportement attendu
|
|
|
|
Le modèle contient uniquement un nœud racine.
|
|
|
|
Exemple :
|
|
|
|
```text
|
|
Template
|
|
```
|
|
|
|
Les enfants seront ajoutés dans un ticket ultérieur.
|
|
|
|
---
|
|
|
|
## Contraintes techniques
|
|
|
|
- C17
|
|
- Structure opaque
|
|
- Aucun état global
|
|
- Aucune dépendance GTK
|
|
- Documentation Doxygen
|
|
- Compilation sans warning
|
|
- Respect des conventions du projet
|
|
|
|
---
|
|
|
|
## Critères d'acceptation
|
|
|
|
- [ ] Le projet compile sans warning.
|
|
- [ ] Le modèle est opaque.
|
|
- [ ] Le modèle possède un nœud racine.
|
|
- [ ] Le getter retourne le nœud racine.
|
|
- [ ] La destruction du modèle détruit également le nœud racine.
|
|
- [ ] Aucun code GTK.
|
|
- [ ] Aucun code SQLite.
|
|
|
|
---
|
|
|
|
## Tests
|
|
|
|
- création d'un modèle valide ;
|
|
- lecture du nœud racine ;
|
|
- destruction du modèle ;
|
|
- création avec un nœud NULL ;
|
|
- destruction avec NULL.
|
|
|
|
---
|
|
|
|
## Commit attendu
|
|
|
|
```text
|
|
feat(core): create investigation tree model
|
|
```
|