# Migration vers DataModels pour BoL ## Vue d'ensemble Cette migration transforme le système BoL (Barbarians of Lemuria) pour utiliser les DataModels de Foundry VTT v12+, à l'instar des systèmes `fvtt-cthulhu-eternal` et `fvtt-mournblade`. ## Structure des fichiers ### Nouveaux fichiers créés ``` module/models/ ├── _module.mjs # Fichier d'export principal ├── character.mjs # DataModel pour les personnages ├── encounter.mjs # DataModel pour les rencontres ├── horde.mjs # DataModel pour les hordes ├── vehicle.mjs # DataModel pour les véhicules ├── item.mjs # DataModel pour les items └── feature.mjs # DataModel pour les features ``` ### Fichier modifié - `module/bol.js` : Ajout de l'import des DataModels et configuration de `CONFIG.Actor.dataModels` et `CONFIG.Item.dataModels` ## Changements apportés ### 1. Structure Actor Le template.json définissait 4 types d'acteurs : - **character** : Personnages joueurs - **encounter** : PNJ/Créatures - **horde** : Groupes de créatures - **vehicle** : Véhicules Chaque type a maintenant son propre DataModel dans `/module/models/`. ### 2. Structure Item Le template.json définissait 2 types d'items : - **item** : Objets/équipements - **feature** : Capacités/traits Chaque type a son DataModel correspondant. ### 3. Migration des templates Les templates du template.json ont été convertis en champs de DataModel : - `base` → Intégré directement dans chaque DataModel - `equipment` → Intégré dans le DataModel `item` ### 4. Utilisation de foundry.data.fields Tous les champs utilisent désormais les types de champs standard de Foundry : - `StringField` pour les chaînes - `NumberField` pour les nombres (avec option `integer: true` pour les entiers) - `BooleanField` pour les booléens - `HTMLField` pour le HTML enrichi - `ArrayField` pour les tableaux - `SchemaField` pour les objets imbriqués ## Avantages de la migration 1. **Validation automatique** : Les DataModels valident automatiquement les données 2. **Performance** : Meilleure gestion de la mémoire et des calculs dérivés 3. **Typage** : Support TypeScript amélioré 4. **Maintenance** : Code plus structuré et maintenable 5. **Compatibilité** : Aligné sur les standards Foundry VTT v12+ ## Points d'attention ### Compatibilité ascendante Le template.json reste en place pour assurer la compatibilité avec les données existantes. Les DataModels utilisent la même structure de données. ### Accès aux données **Avant (avec template.json seul)** : ```javascript actor.system.attributes.vigor.value ``` **Après (avec DataModels)** : ```javascript actor.system.attributes.vigor.value // Identique ! ``` ### Calculs dérivés Les DataModels permettent d'ajouter facilement des méthodes `prepareDerivedData()` pour calculer automatiquement des valeurs dérivées. Voir exemple dans `fvtt-cthulhu-eternal/module/models/protagonist.mjs`. ## Prochaines étapes recommandées 1. **Ajouter prepareDerivedData()** : Pour calculer automatiquement les valeurs dérivées (HP max, initiative, etc.) 2. **Migrer les méthodes métier** : Déplacer la logique métier depuis `actor.js` vers les DataModels 3. **Supprimer template.json** : Une fois la migration complètement testée 4. **Ajouter des validations** : Utiliser les validateurs des DataFields 5. **Documentation JSDoc** : Documenter les DataModels pour le développement ## Référence ### Exemples utilisés - **fvtt-cthulhu-eternal** : Structure de DataModels complexes avec logique métier - **fvtt-mournblade** : Organisation simple et claire des DataModels ### Documentation Foundry - [DataModel API](https://foundryvtt.com/api/classes/foundry.abstract.DataModel.html) - [Data Fields](https://foundryvtt.com/api/modules/foundry.data.fields.html)