From 98ea07c908ae724fea43e431ea1abb51c9819eb9 Mon Sep 17 00:00:00 2001 From: walcutt Date: Fri, 17 Jan 2025 15:23:02 -0500 Subject: [PATCH] Added migration system --- module/cards/hench-card.mjs | 14 ++++++++++++++ module/cards/hench-cards.mjs | 17 ++++++++++++++++- module/constants/versions.mjs | 6 ++++++ module/data-models.mjs | 26 ++++++++++++++++++++++++-- 4 files changed, 60 insertions(+), 3 deletions(-) create mode 100644 module/constants/versions.mjs diff --git a/module/cards/hench-card.mjs b/module/cards/hench-card.mjs index a5ce6c3..0e5dc09 100644 --- a/module/cards/hench-card.mjs +++ b/module/cards/hench-card.mjs @@ -1,3 +1,5 @@ +import { CURRENT_VERSION, versions } from '../constants/versions.mjs'; + const { HTMLField, SchemaField, NumberField, StringField, BooleanField, FilePathField, ArrayField } = foundry.data.fields; export const CARD_ZONES = { @@ -11,10 +13,22 @@ export const CARD_ZONES = { export class HenchCardDataModel extends foundry.abstract.TypeDataModel { static defineSchema() { return { + version: new StringField({ required: true, blank: true, initial: CURRENT_VERSION, options: versions }), cue: new StringField({required: true, blank: true, initial: ""}), zone: new StringField({required: true, blank: false, initial: CARD_ZONES.DECK, options: CARD_ZONES}), }; } + + static migrateData(source) { + // Draft 0 -> Draft 1 + if(!source.version || source.version === versions.DRAFT_0) { + // Changes + + source.version = versions.DRAFT_1; + } + + return super.migrateData(source); + } } // Document Class diff --git a/module/cards/hench-cards.mjs b/module/cards/hench-cards.mjs index a87cb09..69c2555 100644 --- a/module/cards/hench-cards.mjs +++ b/module/cards/hench-cards.mjs @@ -1,3 +1,5 @@ +import { CURRENT_VERSION, versions } from '../constants/versions.mjs'; + import { CARD_ZONES } from "./hench-card.mjs"; const { StringField } = foundry.data.fields; @@ -5,7 +7,20 @@ const { StringField } = foundry.data.fields; // Data Model export class HenchCardsDataModel extends foundry.abstract.TypeDataModel { static defineSchema() { - return {}; + return { + version: new StringField({ required: true, blank: true, initial: CURRENT_VERSION, options: versions }), + }; + } + + static migrateData(source) { + // Draft 0 -> Draft 1 + if(!source.version || source.version === versions.DRAFT_0) { + // Changes + + source.version = versions.DRAFT_1; + } + + return super.migrateData(source); } } diff --git a/module/constants/versions.mjs b/module/constants/versions.mjs new file mode 100644 index 0000000..662ac4c --- /dev/null +++ b/module/constants/versions.mjs @@ -0,0 +1,6 @@ +export const versions = { + DRAFT_0: "0", + DRAFT_1: "1", +}; + +export const CURRENT_VERSION = versions.DRAFT_1; \ No newline at end of file diff --git a/module/data-models.mjs b/module/data-models.mjs index ececd70..b3541e5 100644 --- a/module/data-models.mjs +++ b/module/data-models.mjs @@ -2,6 +2,7 @@ const { HTMLField, SchemaField, NumberField, StringField, BooleanField, FilePath import { getBossMutation, nullStorylineKey, storylineKeys } from './boss.mjs'; import { nullPlaybookKey, playbookKeys, lookupPlaybook, getPlaybookMutation } from './playbooks.mjs'; +import { CURRENT_VERSION, versions } from './constants/versions.mjs'; const textField = () => new StringField({ required: true, blank: true }); @@ -41,6 +42,7 @@ const nullPlaybook = lookupPlaybook(nullPlaybookKey); export class HenchDataModel extends foundry.abstract.TypeDataModel { static defineSchema() { return { + version: new StringField({ required: true, blank: true, initial: CURRENT_VERSION, options: versions }), look: textField(), details: cappedArrayField(promptField(), 2), fixedInclinations: cappedArrayField(textField(), 2), @@ -72,7 +74,22 @@ export class HenchDataModel extends foundry.abstract.TypeDataModel { } static migrateData(source) { - // No migrations yet - base case. + // Draft 0 -> Draft 1 + if(!source.version || source.version === versions.DRAFT_0) { + // Changes + // Update stress cap. + if(source.stress > 8) { + source.stress = 8; + } + + // Add exp trigger. + source.experienceTriggers.splice(2, 0, { + marked: false, + description: "You got on the boss's nerves.", + }); + + source.version = versions.DRAFT_1; + } return super.migrateData(source); } @@ -116,6 +133,7 @@ export class HenchDataModel extends foundry.abstract.TypeDataModel { export class BossDataModel extends foundry.abstract.TypeDataModel { static defineSchema() { return { + version: new StringField({ required: true, blank: true, initial: CURRENT_VERSION, options: versions }), look: textField(), details: cappedArrayField(promptField(), 4), storyline: new StringField({ required: true, blank: false, initial: nullStorylineKey, options: storylineKeys}), @@ -130,7 +148,11 @@ export class BossDataModel extends foundry.abstract.TypeDataModel { } static migrateData(source) { - // no migrations yet + if(!source.version || source.version === versions.DRAFT_0) { + // Changes + + source.version = versions.DRAFT_1; + } return super.migrateData(source); }