mirror of
https://github.com/taobataoma/meanTorrent.git
synced 2026-01-12 10:22:27 +01:00
143 lines
2.8 KiB
JavaScript
143 lines
2.8 KiB
JavaScript
'use strict';
|
|
|
|
/**
|
|
* Module dependencies
|
|
*/
|
|
var mongoose = require('mongoose'),
|
|
Schema = mongoose.Schema,
|
|
path = require('path'),
|
|
config = require(path.resolve('./config/config')),
|
|
chalk = require('chalk');
|
|
|
|
/**
|
|
* Article Schema
|
|
*/
|
|
var ArticleSchema = new Schema({
|
|
created: {
|
|
type: Date,
|
|
default: Date.now
|
|
},
|
|
title: {
|
|
type: String,
|
|
default: '',
|
|
trim: true,
|
|
required: 'Title cannot be blank'
|
|
},
|
|
content: {
|
|
type: String,
|
|
default: '',
|
|
trim: true
|
|
},
|
|
user: {
|
|
type: Schema.ObjectId,
|
|
ref: 'User'
|
|
},
|
|
test: {
|
|
type: String,
|
|
default: 'def'
|
|
}
|
|
}, {usePushEach: true});
|
|
|
|
ArticleSchema.statics.seed = seed;
|
|
|
|
mongoose.model('Article', ArticleSchema);
|
|
|
|
/**
|
|
* Seeds the User collection with document (Article)
|
|
* and provided options.
|
|
*/
|
|
function seed(doc, options) {
|
|
var Article = mongoose.model('Article');
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
|
|
skipDocument()
|
|
.then(findAdminUser)
|
|
.then(add)
|
|
.then(function (response) {
|
|
return resolve(response);
|
|
})
|
|
.catch(function (err) {
|
|
return reject(err);
|
|
});
|
|
|
|
function findAdminUser(skip) {
|
|
var User = mongoose.model('User');
|
|
|
|
return new Promise(function (resolve, reject) {
|
|
if (skip) {
|
|
return resolve(true);
|
|
}
|
|
|
|
User
|
|
.findOne({
|
|
roles: {$in: ['admin']}
|
|
})
|
|
.exec(function (err, admin) {
|
|
if (err) {
|
|
return reject(err);
|
|
}
|
|
|
|
doc.user = admin;
|
|
|
|
return resolve();
|
|
});
|
|
});
|
|
}
|
|
|
|
function skipDocument() {
|
|
return new Promise(function (resolve, reject) {
|
|
Article
|
|
.findOne({
|
|
title: doc.title
|
|
})
|
|
.exec(function (err, existing) {
|
|
if (err) {
|
|
return reject(err);
|
|
}
|
|
|
|
if (!existing) {
|
|
return resolve(false);
|
|
}
|
|
|
|
if (existing && !options.overwrite) {
|
|
return resolve(true);
|
|
}
|
|
|
|
// Remove Article (overwrite)
|
|
|
|
existing.remove(function (err) {
|
|
if (err) {
|
|
return reject(err);
|
|
}
|
|
|
|
return resolve(false);
|
|
});
|
|
});
|
|
});
|
|
}
|
|
|
|
function add(skip) {
|
|
return new Promise(function (resolve, reject) {
|
|
if (skip) {
|
|
return resolve({
|
|
message: chalk.yellow('Database Seeding: Article\t' + doc.title + ' skipped')
|
|
});
|
|
}
|
|
|
|
var article = new Article(doc);
|
|
|
|
article.save(function (err) {
|
|
if (err) {
|
|
return reject(err);
|
|
}
|
|
|
|
return resolve({
|
|
message: 'Database Seeding: Article\t' + article.title + ' added'
|
|
});
|
|
});
|
|
});
|
|
}
|
|
});
|
|
}
|