Added migration system

This commit is contained in:
walcutt 2025-01-17 15:23:02 -05:00
parent 60021edefc
commit 98ea07c908
4 changed files with 60 additions and 3 deletions

View File

@ -1,3 +1,5 @@
import { CURRENT_VERSION, versions } from '../constants/versions.mjs';
const { HTMLField, SchemaField, NumberField, StringField, BooleanField, FilePathField, ArrayField } = foundry.data.fields; const { HTMLField, SchemaField, NumberField, StringField, BooleanField, FilePathField, ArrayField } = foundry.data.fields;
export const CARD_ZONES = { export const CARD_ZONES = {
@ -11,10 +13,22 @@ export const CARD_ZONES = {
export class HenchCardDataModel extends foundry.abstract.TypeDataModel { export class HenchCardDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
return { return {
version: new StringField({ required: true, blank: true, initial: CURRENT_VERSION, options: versions }),
cue: new StringField({required: true, blank: true, initial: ""}), cue: new StringField({required: true, blank: true, initial: ""}),
zone: new StringField({required: true, blank: false, initial: CARD_ZONES.DECK, options: CARD_ZONES}), 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 // Document Class

View File

@ -1,3 +1,5 @@
import { CURRENT_VERSION, versions } from '../constants/versions.mjs';
import { CARD_ZONES } from "./hench-card.mjs"; import { CARD_ZONES } from "./hench-card.mjs";
const { StringField } = foundry.data.fields; const { StringField } = foundry.data.fields;
@ -5,7 +7,20 @@ const { StringField } = foundry.data.fields;
// Data Model // Data Model
export class HenchCardsDataModel extends foundry.abstract.TypeDataModel { export class HenchCardsDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { 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);
} }
} }

View File

@ -0,0 +1,6 @@
export const versions = {
DRAFT_0: "0",
DRAFT_1: "1",
};
export const CURRENT_VERSION = versions.DRAFT_1;

View File

@ -2,6 +2,7 @@ const { HTMLField, SchemaField, NumberField, StringField, BooleanField, FilePath
import { getBossMutation, nullStorylineKey, storylineKeys } from './boss.mjs'; import { getBossMutation, nullStorylineKey, storylineKeys } from './boss.mjs';
import { nullPlaybookKey, playbookKeys, lookupPlaybook, getPlaybookMutation } from './playbooks.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 }); const textField = () => new StringField({ required: true, blank: true });
@ -41,6 +42,7 @@ const nullPlaybook = lookupPlaybook(nullPlaybookKey);
export class HenchDataModel extends foundry.abstract.TypeDataModel { export class HenchDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
return { return {
version: new StringField({ required: true, blank: true, initial: CURRENT_VERSION, options: versions }),
look: textField(), look: textField(),
details: cappedArrayField(promptField(), 2), details: cappedArrayField(promptField(), 2),
fixedInclinations: cappedArrayField(textField(), 2), fixedInclinations: cappedArrayField(textField(), 2),
@ -72,7 +74,22 @@ export class HenchDataModel extends foundry.abstract.TypeDataModel {
} }
static migrateData(source) { 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); return super.migrateData(source);
} }
@ -116,6 +133,7 @@ export class HenchDataModel extends foundry.abstract.TypeDataModel {
export class BossDataModel extends foundry.abstract.TypeDataModel { export class BossDataModel extends foundry.abstract.TypeDataModel {
static defineSchema() { static defineSchema() {
return { return {
version: new StringField({ required: true, blank: true, initial: CURRENT_VERSION, options: versions }),
look: textField(), look: textField(),
details: cappedArrayField(promptField(), 4), details: cappedArrayField(promptField(), 4),
storyline: new StringField({ required: true, blank: false, initial: nullStorylineKey, options: storylineKeys}), 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) { static migrateData(source) {
// no migrations yet if(!source.version || source.version === versions.DRAFT_0) {
// Changes
source.version = versions.DRAFT_1;
}
return super.migrateData(source); return super.migrateData(source);
} }