Valider une enquête existante. #22

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

Titre

Valider une enquête existante.


Objectif

Ajouter au module InvestigationProject la capacité de vérifier qu’un dossier
correspond bien à une enquête Labfy Investigation valide.

La validation doit contrôler la présence et le type des éléments obligatoires,
sans modifier le contenu du dossier.


Architecture

Application
    │
    ▼
InvestigationProject
    │
    ▼
FileSystem

Toute ouverture d’enquête existante doit passer par
InvestigationProject.

La GUI ne doit jamais décider seule si un dossier est valide.


Responsabilités

InvestigationProject

Le module doit :

  • recevoir le chemin d’un dossier ;
  • vérifier que le chemin existe ;
  • vérifier qu’il désigne un dossier ;
  • vérifier la présence de l’arborescence obligatoire ;
  • vérifier que les dossiers attendus sont bien des dossiers ;
  • vérifier la présence de 00_BaseDeDonnees/Enquete.sqlite ;
  • vérifier que Enquete.sqlite est un fichier régulier ;
  • retourner un résultat clair sans modifier le dossier.

Interface publique attendue

Faire évoluer :

include/core/investigation_project.h
src/core/investigation_project.c

Ajouter :

bool investigation_project_validate(
    const char *investigation_path
);

Contrat

La fonction retourne :

true

si le dossier est une enquête valide.

Elle retourne :

false

si :

  • le chemin est invalide ;
  • le dossier n’existe pas ;
  • le chemin désigne un fichier ;
  • un dossier obligatoire manque ;
  • un élément attendu comme dossier est en réalité un fichier ;
  • Enquete.sqlite manque ;
  • Enquete.sqlite n’est pas un fichier régulier.

La fonction ne doit jamais modifier le système de fichiers.


Structure obligatoire

Les dossiers suivants doivent exister :

00_BaseDeDonnees
01_Preuves_Originales
02_Preuves_Traitees
03_Chronologie
04_Entites
05_Rapports
06_Exports
07_Notes
08_Sources
09_Hash

Les sous-dossiers suivants doivent également exister :

01_Preuves_Originales/Captures_Ecran
01_Preuves_Originales/Conversations
01_Preuves_Originales/Documents
01_Preuves_Originales/Emails
01_Preuves_Originales/Photos
01_Preuves_Originales/Videos

02_Preuves_Traitees/Annotations
02_Preuves_Traitees/Extractions
02_Preuves_Traitees/OCR
02_Preuves_Traitees/Redactions

04_Entites/Adresses_Email
04_Entites/Comptes_Bancaires
04_Entites/Comptes_Facebook
04_Entites/Comptes_Instagram
04_Entites/Documents_Identite
04_Entites/IBAN
04_Entites/Personnes
04_Entites/Pseudonymes
04_Entites/Telephones
04_Entites/Autres

Le fichier suivant doit exister :

00_BaseDeDonnees/Enquete.sqlite

Réutilisation de la structure déclarative

La validation doit réutiliser la même liste de chemins que la création.

Il ne doit pas exister deux listes indépendantes décrivant l’arborescence.

La structure de référence doit rester centralisée dans
investigation_project.c.


Hors périmètre

Ce ticket ne doit pas :

  • ouvrir SQLite ;
  • lire le schéma SQL ;
  • vérifier la version de la base ;
  • créer les éléments manquants ;
  • réparer une enquête ;
  • importer automatiquement des fichiers ;
  • modifier GTK ;
  • ouvrir automatiquement l’enquête dans l’application.

Gestion des erreurs

Dans ce ticket, la fonction retourne uniquement un booléen.

Les détails d’erreur plus précis pourront être ajoutés plus tard avec :

GError

ou une énumération métier dédiée.

La validation ne doit produire aucun g_warning() pour un dossier simplement
invalide : un résultat false suffit.


Contraintes techniques

  • C17 ;
  • GLib autorisée ;
  • aucune dépendance GTK ;
  • aucune dépendance SQLite requise ;
  • aucune écriture sur le disque ;
  • aucun état global ;
  • documentation Doxygen ;
  • compilation sans warning.

Tests

Faire évoluer :

tests/test_investigation_project.c

Le test doit vérifier :

  • une enquête complète est valide ;
  • NULL est refusé ;
  • une chaîne vide est refusée ;
  • un chemin inexistant est refusé ;
  • un fichier simple est refusé ;
  • une enquête sans Enquete.sqlite est refusée ;
  • une enquête avec un dossier obligatoire manquant est refusée ;
  • un élément attendu comme dossier mais remplacé par un fichier est refusé ;
  • une enquête valide reste inchangée après validation.

Critères d’acceptation

  • Le projet compile sans warning.
  • make test reste entièrement valide.
  • Une enquête créée par investigation_project_create() est valide.
  • Un chemin invalide est refusé.
  • Un dossier incomplet est refusé.
  • Un faux fichier Enquete.sqlite incorrect est refusé.
  • Aucun élément n’est créé pendant la validation.
  • Aucun élément n’est supprimé pendant la validation.
  • La structure de référence n’est pas dupliquée.
  • Aucune dépendance GTK.
  • Aucun Gtk-CRITICAL.

Commit attendu

feat(core): validate investigation project structure
## Titre Valider une enquête existante. --- ## Objectif Ajouter au module `InvestigationProject` la capacité de vérifier qu’un dossier correspond bien à une enquête Labfy Investigation valide. La validation doit contrôler la présence et le type des éléments obligatoires, sans modifier le contenu du dossier. --- ## Architecture ```text Application │ ▼ InvestigationProject │ ▼ FileSystem ``` Toute ouverture d’enquête existante doit passer par `InvestigationProject`. La GUI ne doit jamais décider seule si un dossier est valide. --- ## Responsabilités ### InvestigationProject Le module doit : - recevoir le chemin d’un dossier ; - vérifier que le chemin existe ; - vérifier qu’il désigne un dossier ; - vérifier la présence de l’arborescence obligatoire ; - vérifier que les dossiers attendus sont bien des dossiers ; - vérifier la présence de `00_BaseDeDonnees/Enquete.sqlite` ; - vérifier que `Enquete.sqlite` est un fichier régulier ; - retourner un résultat clair sans modifier le dossier. --- ## Interface publique attendue Faire évoluer : ```text include/core/investigation_project.h src/core/investigation_project.c ``` Ajouter : ```c bool investigation_project_validate( const char *investigation_path ); ``` --- ## Contrat La fonction retourne : ```c true ``` si le dossier est une enquête valide. Elle retourne : ```c false ``` si : - le chemin est invalide ; - le dossier n’existe pas ; - le chemin désigne un fichier ; - un dossier obligatoire manque ; - un élément attendu comme dossier est en réalité un fichier ; - `Enquete.sqlite` manque ; - `Enquete.sqlite` n’est pas un fichier régulier. La fonction ne doit jamais modifier le système de fichiers. --- ## Structure obligatoire Les dossiers suivants doivent exister : ```text 00_BaseDeDonnees 01_Preuves_Originales 02_Preuves_Traitees 03_Chronologie 04_Entites 05_Rapports 06_Exports 07_Notes 08_Sources 09_Hash ``` Les sous-dossiers suivants doivent également exister : ```text 01_Preuves_Originales/Captures_Ecran 01_Preuves_Originales/Conversations 01_Preuves_Originales/Documents 01_Preuves_Originales/Emails 01_Preuves_Originales/Photos 01_Preuves_Originales/Videos 02_Preuves_Traitees/Annotations 02_Preuves_Traitees/Extractions 02_Preuves_Traitees/OCR 02_Preuves_Traitees/Redactions 04_Entites/Adresses_Email 04_Entites/Comptes_Bancaires 04_Entites/Comptes_Facebook 04_Entites/Comptes_Instagram 04_Entites/Documents_Identite 04_Entites/IBAN 04_Entites/Personnes 04_Entites/Pseudonymes 04_Entites/Telephones 04_Entites/Autres ``` Le fichier suivant doit exister : ```text 00_BaseDeDonnees/Enquete.sqlite ``` --- ## Réutilisation de la structure déclarative La validation doit réutiliser la même liste de chemins que la création. Il ne doit pas exister deux listes indépendantes décrivant l’arborescence. La structure de référence doit rester centralisée dans `investigation_project.c`. --- ## Hors périmètre Ce ticket ne doit pas : - ouvrir SQLite ; - lire le schéma SQL ; - vérifier la version de la base ; - créer les éléments manquants ; - réparer une enquête ; - importer automatiquement des fichiers ; - modifier GTK ; - ouvrir automatiquement l’enquête dans l’application. --- ## Gestion des erreurs Dans ce ticket, la fonction retourne uniquement un booléen. Les détails d’erreur plus précis pourront être ajoutés plus tard avec : ```c GError ``` ou une énumération métier dédiée. La validation ne doit produire aucun `g_warning()` pour un dossier simplement invalide : un résultat `false` suffit. --- ## Contraintes techniques - C17 ; - GLib autorisée ; - aucune dépendance GTK ; - aucune dépendance SQLite requise ; - aucune écriture sur le disque ; - aucun état global ; - documentation Doxygen ; - compilation sans warning. --- ## Tests Faire évoluer : ```text tests/test_investigation_project.c ``` Le test doit vérifier : - une enquête complète est valide ; - `NULL` est refusé ; - une chaîne vide est refusée ; - un chemin inexistant est refusé ; - un fichier simple est refusé ; - une enquête sans `Enquete.sqlite` est refusée ; - une enquête avec un dossier obligatoire manquant est refusée ; - un élément attendu comme dossier mais remplacé par un fichier est refusé ; - une enquête valide reste inchangée après validation. --- ## Critères d’acceptation - [x] Le projet compile sans warning. - [x] `make test` reste entièrement valide. - [x] Une enquête créée par `investigation_project_create()` est valide. - [x] Un chemin invalide est refusé. - [x] Un dossier incomplet est refusé. - [x] Un faux fichier `Enquete.sqlite` incorrect est refusé. - [x] Aucun élément n’est créé pendant la validation. - [x] Aucun élément n’est supprimé pendant la validation. - [x] La structure de référence n’est pas dupliquée. - [x] Aucune dépendance GTK. - [x] Aucun `Gtk-CRITICAL`. --- ## Commit attendu ```text feat(core): validate investigation project structure ```
fy59 closed this issue 2026-07-18 08:41:24 +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#22
No description provided.