labfy-investigation/docs/tickets/closed/TICKET-007.md
2026-07-13 00:38:11 +02:00

3 KiB

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

InvestigationTreeModel
        │
        └── InvestigationNode

Le module appartient à la couche core.

Il ne doit contenir aucune dépendance vers GTK.


Fichiers concernés

include/core/investigation_node.h
src/core/investigation_node.c

Type attendu

typedef enum
{
    INVESTIGATION_NODE_DIRECTORY,
    INVESTIGATION_NODE_FILE
} InvestigationNodeType;

Interface publique attendue

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 :

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

feat(core): create investigation node