UNPKG

apemandb

Version:
58 lines (53 loc) 1.64 kB
/** * @function applySeed * @param {object} model - A model instance * @param {data} data - Data to insert * @param {object} [options] - Optional settings. * @param {boolean} [options.force] - Force to seed * @returns {Promise} */ 'use strict' const co = require('co') const colorprint = require('colorprint') const integersString = require('../helpers/integers_string') /** @lends applySeed */ function applySeed (model, data, options = {}) { let _duplicate = (data) => co(function * () { let { id } = data if (typeof id === 'undefined') { return yield model.find({ where: data }) } return yield model.findById(id, {}) }) let { name: modelName } = model let skipped = [] return Promise.all( [].concat(data).map((data) => co(function * () { for (let name of Object.keys(data)) { data[ name ] = yield Promise.resolve(data[ name ]) } let found = yield _duplicate(data) if (found) { if (options.force) { yield found.destroy() let created = yield model.create(data) colorprint.debug(`[${modelName}] Data destroy and re-created: ${created.id}`) return created } else { skipped.push(data.id) return null } } let created = yield model.create(data) colorprint.debug(`[${modelName}] Data created: ${created.id || ''}`) return created })) ).then((result) => { if (skipped.length > 0) { colorprint.warn(`[${modelName}] Skip seed with existing ids: ${integersString(skipped)}`) } skipped = [] return result }) } module.exports = applySeed