184 lines
3 KiB
Markdown
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
|
|
```
|