diff --git a/app/imports/api/creature/archive/methods/archiveCreatureToFile.js b/app/imports/api/creature/archive/methods/archiveCreatureToFile.js index 76a99d1a..d3c6f76f 100644 --- a/app/imports/api/creature/archive/methods/archiveCreatureToFile.js +++ b/app/imports/api/creature/archive/methods/archiveCreatureToFile.js @@ -30,9 +30,10 @@ export function getArchiveObj(creatureId){ return archiveCreature; } -export function writeArchiveCreatureFile(archive){ +export function archiveCreature(creatureId){ + const archive = getArchiveObj(creatureId); const buffer = Buffer.from(JSON.stringify(archive, null, 2)); - return ArchiveCreatureFiles.write(buffer, { + const result = ArchiveCreatureFiles.write(buffer, { fileName: `${archive.creature.name || archive.creature._id}.json`, type: 'application/json', userId: archive.creature.owner, @@ -42,6 +43,8 @@ export function writeArchiveCreatureFile(archive){ creatureName: archive.creature.name, }, }); + removeCreatureWork(creatureId); + return result; } const archiveCreatureToFile = new ValidatedMethod({ @@ -60,10 +63,10 @@ const archiveCreatureToFile = new ValidatedMethod({ async run({creatureId}) { assertOwnership(creatureId, this.userId); if (Meteor.isServer){ - const archive = getArchiveObj(creatureId); - writeArchiveCreatureFile(archive); + archiveCreature(creatureId); + } else { + removeCreatureWork(creatureId); } - removeCreatureWork(creatureId); }, }); diff --git a/app/imports/api/creature/archive/methods/index.js b/app/imports/api/creature/archive/methods/index.js index 025527fd..d3784bde 100644 --- a/app/imports/api/creature/archive/methods/index.js +++ b/app/imports/api/creature/archive/methods/index.js @@ -1,4 +1,4 @@ -import '/imports/api/creature/archive/methods/archiveCreatures.js'; +// import '/imports/api/creature/archive/methods/archiveCreatures.js'; import '/imports/api/creature/archive/methods/archiveCreatureToFile.js'; import '/imports/api/creature/archive/methods/restoreCreatures.js'; import '/imports/api/creature/archive/methods/restoreCreatureFromFile.js'; diff --git a/app/imports/api/creature/archive/methods/restoreCreatures.js b/app/imports/api/creature/archive/methods/restoreCreatures.js index b4ec2c44..5da270e7 100644 --- a/app/imports/api/creature/archive/methods/restoreCreatures.js +++ b/app/imports/api/creature/archive/methods/restoreCreatures.js @@ -9,7 +9,7 @@ import Experiences from '/imports/api/creature/experience/Experiences.js'; import ArchivedCreatures from '/imports/api/creature/archive/ArchivedCreatures.js'; import { removeCreatureWork } from '/imports/api/creature/creatures/methods/removeCreature.js'; -function restoreCreature(archiveId){ +export function restoreCreature(archiveId){ // Get the archive const archivedCreature = ArchivedCreatures.findOne(archiveId); diff --git a/app/imports/migrations/server/2.0-beta.33-dbv1.js b/app/imports/migrations/server/2.0-beta.33-dbv1.js index 76b35047..625ad6e3 100644 --- a/app/imports/migrations/server/2.0-beta.33-dbv1.js +++ b/app/imports/migrations/server/2.0-beta.33-dbv1.js @@ -1,6 +1,9 @@ import { Migrations } from 'meteor/percolate:migrations'; import CreatureProperties from '/imports/api/creature/creatureProperties/CreatureProperties.js'; import LibraryNodes from '/imports/api/library/LibraryNodes.js'; +import ArchivedCreatures from '/imports/api/creature/archive/ArchivedCreatures.js'; +import { restoreCreature } from '/imports/api/creature/archive/methods/restoreCreatures.js'; +import { archiveCreature } from '/imports/api/creature/archive/methods/archiveCreatureToFile.js'; import transformFields from '/imports/migrations/server/transformFields.js'; import SCHEMA_VERSION from '/imports/constants/SCHEMA_VERSION.js'; import STORAGE_LIMITS from '/imports/constants/STORAGE_LIMITS.js'; @@ -19,14 +22,34 @@ Migrations.add({ }); function migrate({reversed} = {}){ - console.log('unarchiving all characters from database archive'); - // TODO + console.log('restoring all characters from database archive'); + const restoredIds = restoreAllCreatures(); + console.log('migrating creature properties'); migrateCollection({collection: CreatureProperties, reversed}); + console.log('migrating library nodes') migrateCollection({collection: LibraryNodes, reversed}); + console.log('archiving characters to file system archive'); - // TODO + rearchiveAllCreatures(restoredIds); +} + +function restoreAllCreatures(){ + const ids = []; + ArchivedCreatures.find({}, { + fields: {_id: 1} + }).forEach(archive => { + const id = restoreCreature(archive._id); + ids.push(id); + }); + return ids; +} + +function rearchiveAllCreatures(ids){ + ids.forEach(id => { + archiveCreature(id); + }); } function migrateCollection({collection, reversed}){