labfy-investigation/docs/tickets/closed/TICKET-008.md
grayTerminal-sh 2bd29e6208 arbo
2026-07-13 13:57:25 +02:00

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
```