Data Model: Catégorisation des dossiers à la racine de l'archive
Entités dérivées de spec.md § Key Entities et Functional Requirements.
Répertoire racine (archive) — concept, pas une table
Pas une entité stockée en tant que telle : c'est un attribut calculé du chemin d'un dossier ou dossier parent.
Champ (objet RootLocation retourné par determine_root) |
Type | Règles |
|---|---|---|
type |
énumération : annee | categorie |
Déterminé par le choix explicite de l'utilisateur à l'étape de destination (FR-001) ; annee par défaut (FR-002) |
nom |
texte | Si type == annee : dérivé directement de la date EXIF du groupe (AAAA), jamais saisi manuellement. Si type == categorie : nom choisi par l'utilisateur, nettoyé selon les mêmes règles que tout nom de dossier (specs/001-import-photos FR-010) |
chemin_archive |
chemin | <racine archive>/<nom>/ |
chemin_local |
chemin | <racine espace de travail local>/<nom>/ — même valeur de nom, en miroir (FR-002/FR-003) |
Règle d'unicité par dossier : un dossier ou dossier parent a exactement un RootLocation à la fois (FR-005). Pour un dossier parent, ce RootLocation est fixé au premier import qui le crée et hérité tel quel par tout sous-dossier ajouté ensuite (FR-006) — pas de re-résolution à chaque sous-dossier.
Catégorie (table categories, dans la base de contexte centralisée de specs/003-config-contexte-travail)
| Champ | Type | Règles |
|---|---|---|
id |
identifiant interne | Clé primaire |
nom |
texte | Unique ; nom de répertoire déjà utilisé au moins une fois (FR-004) |
premiere_utilisation |
horodatage | Date du premier dossier créé sous cette catégorie |
Alimentation : une ligne est ajoutée automatiquement dès qu'un dossier ou dossier parent est créé avec type == categorie pour un nom non encore présent (FR-004, Edge Case "exposition"). Aucune ligne n'est créée pour les répertoires d'année (non ambigus, dérivés de la date).
Usage : suggest_categories(saisie_utilisateur) compare la saisie aux nom déjà présents (cf. research.md § 2) pour réduire le risque de doublon orthographique (Edge Case "Mariage" vs "mariage") ; list_known_categories() retourne la liste complète pour proposition à l'étape de destination (FR-004).
Relation avec Dossier / Dossier parent (repris de specs/001-import-photos, non redéfinis)
Dossier ──1────1── RootLocation (année ou catégorie, fixé à la création)
│
└─ Sous-dossier (dossier parent uniquement) ── hérite du même RootLocation que son parent, jamais recalculé
État / transitions
[Dossier ou dossier parent]
│ création (import, choix explicite : année ou catégorie)
▼
RootLocation fixé (immuable en écriture directe)
│
│ déplacement détecté par somme de contrôle de contenu inchangé
│ (regine_core.archive.reconciliation.comparer, specs/005-checkout-reconciliation — pas une opération dédiée de ce module)
▼
RootLocation mis à jour (reflète le nouveau chemin détecté)
Il n'existe pas d'opération « recatégoriser » au sens d'une écriture directe sur le RootLocation : la seule voie de changement est un déplacement physique du dossier, détecté comme tel à la réconciliation (FR-008, cf. specs/004-categorisation-dossiers User Story 4).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
|