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

184 lines
3 KiB
Markdown

# Ticket #007
## Titre
Créer le module `InvestigationNode`.
---
## Objectif
Créer une structure métier représentant un élément de l'arborescence d'une enquête.
Un nœud peut représenter :
- un dossier ;
- un fichier.
Ce module servira de base au futur modèle d'arborescence.
---
## Responsabilités
Le module `InvestigationNode` doit :
- mémoriser le nom d'un élément ;
- mémoriser son type ;
- gérer sa propre mémoire ;
- exposer ses informations en lecture seule.
---
## Hors périmètre
Ce ticket ne doit pas :
- parcourir le système de fichiers ;
- construire une arborescence complète ;
- stocker des enfants ;
- afficher quoi que ce soit avec GTK ;
- communiquer avec SQLite ;
- ouvrir une enquête.
---
## Architecture
```text
InvestigationTreeModel
└── InvestigationNode
```
Le module appartient à la couche `core`.
Il ne doit contenir aucune dépendance vers GTK.
---
## Fichiers concernés
```text
include/core/investigation_node.h
src/core/investigation_node.c
```
---
## Type attendu
```c
typedef enum
{
INVESTIGATION_NODE_DIRECTORY,
INVESTIGATION_NODE_FILE
} InvestigationNodeType;
```
---
## Interface publique attendue
```c
InvestigationNode *investigation_node_new(
const char *name,
InvestigationNodeType type
);
void investigation_node_free(
InvestigationNode *node
);
const char *investigation_node_get_name(
const InvestigationNode *node
);
InvestigationNodeType investigation_node_get_type(
const InvestigationNode *node
);
```
---
## Comportement attendu
Exemple d'utilisation :
```c
InvestigationNode *node = NULL;
node = investigation_node_new(
"01_Preuves_Originales",
INVESTIGATION_NODE_DIRECTORY
);
if (node == NULL)
{
/* Gestion de l'erreur */
}
const char *name = investigation_node_get_name(node);
InvestigationNodeType type = investigation_node_get_type(node);
investigation_node_free(node);
```
---
## Cas à gérer
- nom valide ;
- nom vide ;
- pointeur `NULL` ;
- type dossier ;
- type fichier ;
- libération avec `NULL`.
---
## Contraintes techniques
- C17 ;
- structure opaque ;
- aucun état global ;
- aucune dépendance GTK ;
- documentation Doxygen ;
- compilation sans warning ;
- noms conformes à `DEVELOPMENT.md`.
---
## Critères d'acceptation
- [ ] Le projet compile sans warning.
- [ ] La structure `InvestigationNode` est opaque.
- [ ] Un nœud peut représenter un fichier.
- [ ] Un nœud peut représenter un dossier.
- [ ] Le nom est copié et possédé par le nœud.
- [ ] Les getters retournent des données en lecture seule.
- [ ] `investigation_node_free(NULL)` est accepté.
- [ ] Aucun code GTK.
- [ ] Aucun code SQLite.
- [ ] Les fonctions publiques sont documentées avec Doxygen.
---
## Tests
- créer un nœud dossier ;
- créer un nœud fichier ;
- lire le nom ;
- lire le type ;
- tester un nom vide ;
- tester un nom `NULL` ;
- libérer un nœud valide ;
- appeler `investigation_node_free(NULL)`.
---
## Commit attendu
```text
feat(core): create investigation node
```