Créer le module InvestigationNode. #7

Closed
opened 2026-07-18 08:22:57 +02:00 by fy59 · 0 comments
Owner

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
## 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 - [x] Le projet compile sans warning. - [x] La structure `InvestigationNode` est opaque. - [x] Un nœud peut représenter un fichier. - [x] Un nœud peut représenter un dossier. - [x] Le nom est copié et possédé par le nœud. - [x] Les getters retournent des données en lecture seule. - [x] `investigation_node_free(NULL)` est accepté. - [x] Aucun code GTK. - [x] Aucun code SQLite. - [x] 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 ```
fy59 closed this issue 2026-07-18 08:23:04 +02:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: fy59/labfy-investigation#7
No description provided.