Improved archive storage calculations and errors

This commit is contained in:
Stefan Zermatten
2022-06-07 23:21:48 +02:00
parent 28934baac9
commit e7e8f938ed
3 changed files with 22 additions and 16 deletions

View File

@@ -1,6 +1,8 @@
import { createS3FilesCollection } from '/imports/api/files/s3FileStorage.js'; import { createS3FilesCollection } from '/imports/api/files/s3FileStorage.js';
import SimpleSchema from 'simpl-schema'; import SimpleSchema from 'simpl-schema';
import { incrementFileStorageUsed } from '/imports/api/users/methods/updateFileStorageUsed.js'; import { incrementFileStorageUsed } from '/imports/api/users/methods/updateFileStorageUsed.js';
import { CreaturePropertySchema } from '/imports/api/creature/creatureProperties/CreatureProperties.js';
import { CreatureSchema } from '/imports/api/creature/creatures/Creatures.js';
const ArchiveCreatureFiles = createS3FilesCollection({ const ArchiveCreatureFiles = createS3FilesCollection({
collectionName: 'archiveCreatureFiles', collectionName: 'archiveCreatureFiles',
@@ -16,7 +18,7 @@ const ArchiveCreatureFiles = createS3FilesCollection({
return true; return true;
}, },
onAfterUpload(file) { onAfterUpload(file) {
incrementFileStorageUsed(file.userId, file.size); if (Meteor.isServer) incrementFileStorageUsed(file.userId, file.size);
} }
}); });
@@ -25,17 +27,11 @@ let archiveSchema = new SimpleSchema({
type: Object, type: Object,
blackbox: true, blackbox: true,
}, },
creature: { creature: CreatureSchema,
type: Object,
blackbox: true,
},
properties: { properties: {
type: Array, type: Array,
}, },
'properties.$': { 'properties.$': CreaturePropertySchema,
type: Object,
blackbox: true,
},
experiences: { experiences: {
type: Array, type: Array,
}, },

View File

@@ -9,7 +9,6 @@ import CreatureLogs from '/imports/api/creature/log/CreatureLogs.js';
import Experiences from '/imports/api/creature/experience/Experiences.js'; import Experiences from '/imports/api/creature/experience/Experiences.js';
import { removeCreatureWork } from '/imports/api/creature/creatures/methods/removeCreature.js'; import { removeCreatureWork } from '/imports/api/creature/creatures/methods/removeCreature.js';
import ArchiveCreatureFiles from '/imports/api/creature/archive/ArchiveCreatureFiles.js'; import ArchiveCreatureFiles from '/imports/api/creature/archive/ArchiveCreatureFiles.js';
import { incrementFileStorageUsed } from '/imports/api/users/methods/updateFileStorageUsed.js';
export function getArchiveObj(creatureId){ export function getArchiveObj(creatureId){
// Build the archive document // Build the archive document
@@ -32,7 +31,7 @@ export function getArchiveObj(creatureId){
return archiveCreature; return archiveCreature;
} }
export function archiveCreature(creatureId, userId){ export function archiveCreature(creatureId){
const archive = getArchiveObj(creatureId); const archive = getArchiveObj(creatureId);
const buffer = Buffer.from(JSON.stringify(archive, null, 2)); const buffer = Buffer.from(JSON.stringify(archive, null, 2));
ArchiveCreatureFiles.write(buffer, { ArchiveCreatureFiles.write(buffer, {
@@ -44,12 +43,11 @@ export function archiveCreature(creatureId, userId){
creatureId: archive.creature._id, creatureId: archive.creature._id,
creatureName: archive.creature.name, creatureName: archive.creature.name,
}, },
}, (error, file) => { }, (error) => {
if (error){ if (error){
throw error; throw error;
} else { } else {
removeCreatureWork(creatureId); removeCreatureWork(creatureId);
incrementFileStorageUsed(userId, file.size);
} }
}, true); }, true);
} }

View File

@@ -42,6 +42,7 @@
<v-btn <v-btn
outlined outlined
style="height: 100%; width: 100%; min-height: 120px;" style="height: 100%; width: 100%; min-height: 120px;"
class="archive-button"
:color="archiveFileError ? 'error' : undefined" :color="archiveFileError ? 'error' : undefined"
@click="$refs.archiveFileInput.click()" @click="$refs.archiveFileInput.click()"
> >
@@ -183,12 +184,16 @@ export default {
data = JSON.parse(fr.result); data = JSON.parse(fr.result);
} catch (e){ } catch (e){
self.archiveFileError = 'File could not be parsed'; self.archiveFileError = 'File could not be parsed';
console.error(e);
return;
} }
console.log(data);
try { try {
archiveSchema.validate(data); archiveSchema.validate(archiveSchema.clean(data));
} catch (e){ } catch (e){
self.archiveFileError = e.reason || e.message || e.toString(); self.archiveFileError = 'File failed validation: ' + (e.reason || e.message || e.toString());
console.error(e);
return;
} }
let uploadInstance = ArchiveCreatureFiles.insert({ let uploadInstance = ArchiveCreatureFiles.insert({
@@ -245,3 +250,10 @@ export default {
}, },
} }
</script> </script>
<style>
.v-btn.archive-button > .v-btn__content {
white-space: normal;
max-width: 100%;
}
</style>