0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-01-27 22:49:56 -05:00
ghost/core/server/data/export/index.js
Katharina Irrgang d81bc91bd2 Error creation (#7477)
refs #7116, refs #2001

- Changes the way Ghost errors are implemented to benefit from proper inheritance
- Moves all error definitions into a single file
- Changes the error constructor to take an options object, rather than needing the arguments to be passed in the correct order.
- Provides a wrapper so that any errors that haven't already been converted to GhostErrors get converted before they are displayed.

Summary of changes:

* 🐛  set NODE_ENV in config handler
*   add GhostError implementation (core/server/errors.js)
  - register all errors in one file
  - inheritance from GhostError
  - option pattern
* 🔥  remove all error files
*   wrap all errors into GhostError in case of HTTP
* 🎨  adaptions
  - option pattern for errors
  - use GhostError when needed
* 🎨  revert debug deletion and add TODO for error id's
2016-10-06 13:27:35 +01:00

87 lines
2.4 KiB
JavaScript

var _ = require('lodash'),
Promise = require('bluebird'),
db = require('../../data/db'),
commands = require('../schema').commands,
versioning = require('../schema').versioning,
serverUtils = require('../../utils'),
errors = require('../../errors'),
logging = require('../../logging'),
settings = require('../../api/settings'),
i18n = require('../../i18n'),
excludedTables = ['accesstokens', 'refreshtokens', 'clients', 'client_trusted_domains'],
modelOptions = {context: {internal: true}},
// private
getVersionAndTables,
exportTable,
// public
doExport,
exportFileName;
exportFileName = function exportFileName() {
var datetime = (new Date()).toJSON().substring(0, 10),
title = '';
return settings.read(_.extend({}, {key: 'title'}, modelOptions)).then(function (result) {
if (result) {
title = serverUtils.safeString(result.settings[0].value) + '.';
}
return title + 'ghost.' + datetime + '.json';
}).catch(function (err) {
logging.error(new errors.GhostError({err: err}));
return 'ghost.' + datetime + '.json';
});
};
getVersionAndTables = function getVersionAndTables() {
var props = {
version: versioning.getDatabaseVersion(),
tables: commands.getTables()
};
return Promise.props(props);
};
exportTable = function exportTable(tableName) {
if (excludedTables.indexOf(tableName) < 0) {
return db.knex(tableName).select();
}
};
doExport = function doExport() {
var tables, version;
return getVersionAndTables().then(function exportAllTables(result) {
tables = result.tables;
version = result.version;
return Promise.mapSeries(tables, exportTable);
}).then(function formatData(tableData) {
var exportData = {
meta: {
exported_on: new Date().getTime(),
version: version
},
data: {
// Filled below
}
};
_.each(tables, function (name, i) {
exportData.data[name] = tableData[i];
});
return exportData;
}).catch(function (err) {
return Promise.reject(new errors.DataExportError({
err: err,
context: i18n.t('errors.data.export.errorExportingData')
}));
});
};
module.exports = {
doExport: doExport,
fileName: exportFileName
};