Added migration system
This commit is contained in:
parent
60021edefc
commit
98ea07c908
@ -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
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
6
module/constants/versions.mjs
Normal file
6
module/constants/versions.mjs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
export const versions = {
|
||||||
|
DRAFT_0: "0",
|
||||||
|
DRAFT_1: "1",
|
||||||
|
};
|
||||||
|
|
||||||
|
export const CURRENT_VERSION = versions.DRAFT_1;
|
@ -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);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user