DB archive characters are migrated and moved to file archive on migrate

This commit is contained in:
Stefan Zermatten
2021-12-20 11:53:02 +02:00
parent 1e10d8751b
commit a5f5baf1cc
4 changed files with 36 additions and 10 deletions

View File

@@ -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);
},
});

View File

@@ -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';

View File

@@ -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);

View File

@@ -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}){