-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathold_seed.js
More file actions
200 lines (176 loc) · 8.11 KB
/
old_seed.js
File metadata and controls
200 lines (176 loc) · 8.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
var mongoose = require('mongoose');
var async = require('async'),
models = require('./server/db/models/schemas.js'),
_ = require('lodash');
var path = require('path');
var DATABASE_URI = require(path.join(__dirname, 'server/env')).DATABASE_URI;
var db = mongoose.connect(DATABASE_URI).connection;
var artistData = [{name: 'Paul Klee'}, {name: 'Jeff Koons'}, {name: 'Damien Hirst'}]
var catData = [
{name: 'African Art'},
{name: 'Feminist Art'},
{name: 'Chinese Art'},
{name: 'Minimalism'},
{name: 'Color Fields'},
{name: 'Emerging Art'},
{name: 'Figurative Painting'},
{name: 'Portrait Photography'},
{name: 'Contemporary Pop'},
{name: 'Ceramics'},
{name: 'Art Nouveau'},
{name: 'Bauhaus'},
{name: 'Post-War American Art'},
{name: 'Post-War European Art'},
{name: 'Renaissance'},
{name: 'Greek and Roman Art and Architecture'},
{name: 'Arts of Africa, Oceania, and the Americas'},
{name: 'Impressionism'}
]
var userData = [
{
email: 'vincent@daranyi.com',
password: 'qwerty'
}
]
var otherData = [{
Product: [
{
title: 'Balloon Dog (Yellow), 1994-2000',
artistId: '1',
description: 'Sed ornare accumsan velit eu vulputate. Phasellus tempor consectetur metus ac gravida. Donec condimentum lacus diam, ut tristique neque rhoncus vel. Praesent pretium mauris pharetra nisl hendrerit, nec hendrerit ipsum sagittis. Nam vitae sapien at ipsum vestibulum scelerisque. Morbi egestas, enim a pulvinar accumsan, lacus arcu mollis justo, eget facilisis elit mauris sed est. Pellentesque gravida bibendum nisi, id blandit arcu molestie ut. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vivamus elementum efficitur tortor, id scelerisque quam varius nec. Pellentesque faucibus justo eget dui ultrices, ut gravida mi rhoncus. Ut vel neque at dolor pulvinar rhoncus in vulputate lacus. Praesent in dapibus nisl. Quisque lectus dui, molestie sed aliquam sit amet, euismod et nibh.',
price: 10000,
categoryId: '0',
imageUrl: 'http://lorempixel.com/400/400'
},
{
title: 'Away from the Flock, 1994',
artistId: '2',
description: 'In tempor ornare hendrerit. Pellentesque ultrices, quam nec fermentum porta, nisl risus tincidunt leo, vitae consequat ante augue ut enim. Nam eget est lacus. Mauris rhoncus tempus augue, ut placerat magna. Sed commodo dapibus libero, at accumsan massa. Vivamus consequat fermentum sem, at auctor nulla condimentum quis. Phasellus tellus risus, ultrices at massa eu, vulputate accumsan orci. Phasellus sodales ipsum at tellus tempus, id accumsan tellus ornare. Praesent augue arcu, pretium suscipit lacus ut, vehicula vehicula odio. Etiam porttitor rhoncus erat, ac ullamcorper est iaculis quis. Quisque in ante libero. Etiam et libero convallis, convallis metus accumsan, consequat nisi. Ut dignissim eget mi at feugiat. Sed malesuada sit amet augue et fringilla. In lorem odio, pretium pellentesque venenatis et, bibendum eu sem. Morbi iaculis nisi id sagittis suscipit.',
price: 5000,
categoryId: '1',
imageUrl:'http://lorempixel.com/400/400'
},
{
title: 'Michael Jackson and Bubbles, 1988',
artistId: '1',
description: 'Proin elit leo, facilisis in quam imperdiet, pulvinar rutrum nulla. Cras quis purus convallis, semper leo sed, malesuada augue. Maecenas aliquam sagittis nisl, sed condimentum enim molestie a. Mauris venenatis interdum placerat. Nulla non velit congue, commodo massa nec, feugiat leo. Aliquam eu leo posuere, egestas lorem ac, facilisis sapien. Donec dictum id magna a fringilla. In sem libero, tempor rutrum luctus vel, posuere eu ligula. Nulla nulla tortor, blandit ac diam a, laoreet tempus nisl. Nam convallis tincidunt lectus id rutrum. In vitae eros neque. Mauris vitae rutrum diam. Vivamus sit amet faucibus metus. Phasellus cursus, tortor nec suscipit aliquet, lorem arcu porttitor dolor, sit amet dictum nisl dui ac lacus. Aliquam fermentum erat dui, dapibus ultricies odio porttitor eu.',
price: 1000,
categoryId: '2',
imageUrl:'http://lorempixel.com/400/400'
},
{
title: 'Twittering Machine, 1922',
artistId: '0',
description: 'Proin non commodo lacus. Cras sem magna, sagittis nec porttitor a, faucibus id turpis. Pellentesque varius tellus neque, at molestie ex rhoncus eleifend. In eget augue lorem. In elementum erat eget leo dapibus scelerisque. Vivamus id bibendum velit, vitae posuere nibh. Praesent feugiat dolor elit. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras sodales tellus nibh, et vehicula erat luctus eu. Nunc lacinia augue quis fringilla luctus. Quisque interdum elit at neque lacinia efficitur. Pellentesque sollicitudin elementum turpis, eu semper nisl tristique aliquam. Praesent varius et sapien at pharetra. Pellentesque tempus maximus massa sed cursus. In ut euismod leo.',
price: 50000,
categoryId: '3',
imageUrl:'http://lorempixel.com/400/400'
}
]},
{ Review: [
{
title: 'Beautiful',
body: '... but too expensive for me',
stars: 5,
productId: '3',
userId: '0'
}
]},
{ Order: [
{
userId: '0',
items: [{
productId: '2',
quantity: 1,
price: 5000
}]
}
]}
];
mongoose.connection.on('open', function() {
mongoose.connection.db.dropDatabase(function() {
console.log("Dropped old data, now inserting data");
async.waterfall([
loadingIndependentModels,
loadingDependentData,
], function (err, result) {
if (err) console.log(err);
// process.exit();
});
function loadingIndependentModels(callback) {
var data = {
artistId: [],
categoryId: [],
userId: []
};
async.each(artistData,
function(artist, done) {
models.Artist.create(artist).then(function(newArtist) {
data.artistId.push(newArtist);
done();
});
},
function(err) {
console.log("Finished inserting artist data");
}
);
async.each(catData,
function(category, done) {
models.Category.create(category).then(function(newCategory) {
data.categoryId.push(newCategory);
done();
});
},
function(err) {
console.log("Finished inserting category data");
}
);
async.each(userData,
function(individual, done) {
models.User.create(individual).then(function(newUser) {
data.userId.push(newUser);
done();
});
},
function(err) {
console.log("Finished inserting user data");
}
);
setTimeout(function() {
callback(null, data);
}, 3000);
};
function loadingDependentData(data, callback) {
// otherData keys should be in order of dependency,
// so products before product reviews, etc.
otherData.forEach(function(modelArr) {
modelName = Object.keys(modelArr)[0];
data[modelName.toLowerCase() + 'Id'] = [];
async.each(modelArr[modelName],
function(newModelObj, cb) {
// Get all keys that end in Id (i.e. artistId)
var ids = _.filter(Object.keys(newModelObj), function(key) {
return key.match(/.*Id/);
});
// Iterate over all Id fields
ids.forEach(function(id) {
// Replace contents of field with Id of respective object
if(newModelObj[id]) newModelObj[id] = data[id][newModelObj[id]]._id;
});
models[modelName].create(newModelObj, function(err, obj) {
console.log("err", err);
console.log(obj);
data[modelName.toLowerCase() + 'Id'].push(obj);
cb();
});
},
function(err) {
console.log("Finished inserting remaining data");
console.log("Control-C to quit");
}
);
});
callback(null);
};
});
});