generic-repository
Version:
Generic repository pattern implementation for node.js. Currently supports mongo and in-memory(testing) databases.
68 lines (67 loc) • 2.05 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
class Seed {
constructor(repo, identifier, seedFile) {
this.repo = repo;
this.identifier = identifier || '_name';
this.seedFile = seedFile;
}
seed() {
let _promises = Array();
return this.repo.count().then(count => {
if (this.shouldUpdateSeed(this.seedFile, count)) {
return this.updateWithSeedData(this.seedFile, _promises);
}
else if (this.shouldInsertSeed(count)) {
return this.insertSeedData(this.seedFile, _promises);
}
else {
console.log('Resource is up-to-date, did not seed ' +
this.repo.Type.prototype.constructor.name + ' collection again.');
return Promise.resolve([]);
}
});
}
updateWithSeedData(_data, _promises) {
if (Array.isArray(_data.data)) {
_promises.push(..._data.data.map((item) => {
return this.updateWithDefaults(item);
}));
}
else {
_promises.push(this.updateWithDefaults(_data.data));
}
return Promise.all(_promises);
}
updateWithDefaults(item) {
return this.repo.update({ [this.identifier]: item[this.identifier] }, item);
}
insertSeedData(_data, _promises) {
if (Array.isArray(_data.data)) {
_data.data.forEach((item) => {
_promises.push(this.repo.insert(item));
});
}
else {
_promises.push(this.repo.insert(_data.data));
}
return Promise.all(_promises);
}
shouldUpdateSeed(_data, count) {
if (count > 0 && _data.seedAlways) {
return true;
}
else {
return false;
}
}
shouldInsertSeed(count) {
if (count <= 0) {
return true;
}
else {
return false;
}
}
}
exports.default = Seed;