Datamodel + Appv2 migration, WIP

This commit is contained in:
2026-01-12 23:32:51 +01:00
parent 2abd2c881a
commit ed76a49e7d
27 changed files with 1695 additions and 1494 deletions

108
MIGRATION_DATAMODELS.md Normal file
View File

@@ -0,0 +1,108 @@
# 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)