# Conventions de développement Version : 1.0 --- # Philosophie Labfy Investigation est développé comme un logiciel d'enquête numérique. Les choix d'architecture privilégient : - la lisibilité ; - la maintenabilité ; - la robustesse ; - la traçabilité ; - la simplicité. Une solution simple et cohérente est toujours préférée à une solution complexe. --- # Langue Le domaine métier est écrit en français. Exemples : - preuve - entite - personne - source - chronologie - journal - hypothese - recherche Les standards techniques conservent leur nom d'origine. Exemples : - uuid - sha256 - mime_type - sqlite - created_at - updated_at - relative_path --- # Architecture Le projet est organisé par domaine métier. Exemple : ``` preuve ↓ preuve.h preuve.c entite ↓ entite.h entite.c ``` Chaque module possède une responsabilité unique. --- # SQL Une table représente un objet métier. Une table importante possède : - une structure C ; - un module C ; - des tests. Les objets métier utilisent : ``` TEXT PRIMARY KEY ``` contenant un UUID. Les tables de référence utilisent : ``` INTEGER PRIMARY KEY ``` --- # UUID Tous les objets métier utilisent un UUID. Exemple : ``` preuve entite personne source chronologie journal ``` Il n'existe pas simultanément : ``` id uuid ``` La colonne : ``` id ``` contient directement l'UUID. --- # Dates Toutes les dates sont enregistrées en UTC. Format : ``` YYYY-MM-DDTHH:MM:SSZ ``` --- # Chemins Les chemins sont toujours relatifs à la racine de l'enquête. Autorisé : ``` 01_Preuves_Originales/Documents/facture.pdf ``` Interdit : ``` /home/user/Documents/... ``` --- # Suppression Les objets métier importants ne sont jamais supprimés immédiatement. Une suppression est une modification d'état. Exemple : ``` active archived deleted ``` Une purge physique éventuelle devra être explicite. --- # Nommage Le SQL utilise : - snake_case - minuscules - aucun accent - aucun espace --- # Code C Norme : ``` C17 ``` Variables : Toujours explicites. Autorisé : ```c relative_path description commentaire created_at ``` Interdit : ```c path desc comm crt ``` Les fonctions utilisent le nom du module. Exemple : ```c preuve_create() preuve_load() preuve_update() preuve_delete() ``` --- # Structures Une structure représente un objet métier. Exemple : ```c typedef struct Preuve Preuve; ``` Les structures publiques sont opaques lorsque cela est possible. --- # Tests Toute nouvelle fonctionnalité importante possède un test. Le développement suit toujours l'ordre : ``` Conception ↓ Implémentation ↓ Tests ↓ Commit ``` --- # Git Un ticket terminé correspond à un commit. Le message de commit est rédigé en anglais. Exemple : ``` feat(database): initialize investigation database ``` --- # Documentation Les décisions importantes sont documentées. Les changements de schéma SQLite sont précédés d'un audit. Aucune décision importante ne doit exister uniquement dans le code. --- # Objectif Le projet doit rester compréhensible plusieurs années après sa création. La priorité est donnée à la qualité du code plutôt qu'à la rapidité de développement.