add product model and seed script

This commit is contained in:
2017-01-26 17:30:38 -07:00
parent 10aab7ca76
commit a41c7428b9
8 changed files with 120 additions and 30 deletions

View File

@@ -2,7 +2,7 @@
const https = require('https');
function fetchCustomers(count = 1) {
const url = `https://randomuser.me/api/?nat=us&results=${count}`;
const url = `https://randomuser.me/api/?nat=us,gb&results=${count}`;
console.log('Seeding from https://randomuser.me/api/');
return new Promise((resolve, reject) => {

10
cli/lib/fetch_products.js Normal file
View File

@@ -0,0 +1,10 @@
/* eslint-disable no-console */
const products = require('./mock_products');
function fetchProducts(count = 1) {
console.log('Seeding products from JSON');
return Promise.resolve(products.slice(0, count));
}
module.exports = fetchProducts;

View File

@@ -0,0 +1,25 @@
[{"name":"lectus in","price":33.21,"added":"2014-09-20T18:09:56Z","description":"nec sem duis aliquam convallis nunc proin at turpis a pede posuere nonummy integer non velit donec diam neque vestibulum eget vulputate ut ultrices vel augue"},
{"name":"blandit","price":4.1,"added":"2014-05-19T02:37:20Z","description":"dui nec nisi volutpat eleifend donec ut dolor morbi vel lectus in quam"},
{"name":"viverra dapibus","price":70.55,"added":"2015-01-16T01:24:39Z","description":"imperdiet sapien urna pretium nisl ut volutpat sapien arcu sed augue aliquam erat volutpat in congue etiam justo etiam pretium iaculis justo"},
{"name":"blandit non","price":85.6,"added":"2015-08-04T07:42:13Z","description":"amet turpis elementum ligula vehicula consequat morbi a ipsum integer a nibh in quis justo maecenas rhoncus aliquam lacus"},
{"name":"cubilia curae","price":95.6,"added":"2015-12-25T08:46:58Z","description":"sed accumsan felis ut at dolor quis odio consequat varius integer ac leo pellentesque ultrices mattis odio donec vitae nisi nam ultrices libero non"},
{"name":"augue","price":98.3,"added":"2015-03-27T18:36:07Z","description":"turpis nec euismod scelerisque quam turpis adipiscing lorem vitae mattis"},
{"name":"luctus tincidunt nulla","price":65.97,"added":"2014-04-26T05:37:16Z","description":"libero non mattis pulvinar nulla pede ullamcorper augue a suscipit"},
{"name":"lacinia","price":25.42,"added":"2016-01-06T16:02:47Z","description":"vestibulum quam sapien varius ut blandit non interdum in ante vestibulum ante"},
{"name":"volutpat convallis","price":43.58,"added":"2014-10-03T22:40:48Z","description":"imperdiet nullam orci pede venenatis non sodales sed tincidunt eu felis fusce posuere felis sed lacus morbi sem mauris laoreet ut rhoncus aliquet pulvinar sed"},
{"name":"maecenas ut massa","price":61.97,"added":"2015-11-01T03:17:47Z","description":"maecenas tincidunt lacus at velit vivamus vel nulla eget eros elementum pellentesque quisque porta volutpat erat quisque erat eros viverra eget congue eget"},
{"name":"lectus pellentesque","price":2.26,"added":"2014-03-22T10:25:38Z","description":"in consequat ut nulla sed accumsan felis ut at dolor quis odio consequat varius integer ac leo"},
{"name":"dui luctus rutrum","price":72.77,"added":"2015-05-29T05:01:34Z","description":"ut at dolor quis odio consequat varius integer ac leo pellentesque ultrices mattis odio donec vitae nisi nam ultrices"},
{"name":"mi nulla","price":84.26,"added":"2014-11-07T06:34:02Z","description":"nisl aenean lectus pellentesque eget nunc donec quis orci eget orci vehicula condimentum curabitur in libero ut massa volutpat"},
{"name":"sit amet","price":15.7,"added":"2015-11-28T07:52:23Z","description":"ut nunc vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae mauris viverra diam"},
{"name":"arcu adipiscing","price":20.98,"added":"2014-07-05T23:39:30Z","description":"dui luctus rutrum nulla tellus in sagittis dui vel nisl duis ac nibh fusce lacus purus aliquet at feugiat non pretium quis lectus suspendisse potenti in eleifend quam"},
{"name":"vestibulum","price":42.73,"added":"2015-03-30T00:20:41Z","description":"vel enim sit amet nunc viverra dapibus nulla suscipit ligula in lacus curabitur at ipsum ac tellus semper"},
{"name":"elementum in","price":64.74,"added":"2014-10-06T11:28:27Z","description":"at turpis a pede posuere nonummy integer non velit donec diam"},
{"name":"vel lectus in","price":13.82,"added":"2015-08-19T01:58:12Z","description":"vitae quam suspendisse potenti nullam porttitor lacus at turpis donec"},
{"name":"id ligula","price":67.06,"added":"2015-12-27T01:20:45Z","description":"in hac habitasse platea dictumst morbi vestibulum velit id pretium iaculis diam erat fermentum justo nec condimentum neque sapien placerat ante nulla"},
{"name":"dapibus nulla","price":33.68,"added":"2014-11-21T19:06:14Z","description":"dui maecenas tristique est et tempus semper est quam pharetra magna ac consequat metus sapien ut nunc vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia"},
{"name":"proin","price":91.7,"added":"2015-12-05T09:05:43Z","description":"id massa id nisl venenatis lacinia aenean sit amet justo morbi ut odio cras mi"},
{"name":"consequat ut","price":12.76,"added":"2014-10-15T17:15:31Z","description":"duis ac nibh fusce lacus purus aliquet at feugiat non pretium quis lectus suspendisse potenti in eleifend quam a odio"},
{"name":"aliquam erat volutpat","price":55.1,"added":"2015-09-17T03:03:14Z","description":"luctus cum sociis natoque penatibus et magnis dis parturient montes nascetur ridiculus mus vivamus vestibulum sagittis sapien cum sociis natoque penatibus et magnis dis parturient montes nascetur ridiculus mus etiam"},
{"name":"mollis molestie","price":90.25,"added":"2015-08-31T02:27:28Z","description":"justo aliquam quis turpis eget elit sodales scelerisque mauris sit amet eros suspendisse accumsan tortor quis turpis sed ante vivamus tortor"},
{"name":"vitae ipsum","price":33.86,"added":"2014-10-20T02:21:36Z","description":"neque duis bibendum morbi non quam nec dui luctus rutrum nulla tellus in sagittis dui vel"}]

View File

@@ -4,6 +4,7 @@ const http = require('http');
const minimist = require('minimist');
const { host, port } = require('../server/config');
const fetchCustomers = require('./lib/fetch_customers');
const fetchProducts = require('./lib/fetch_products');
const argv = minimist(process.argv.slice(2));
const modelName = argv._[0];
@@ -18,6 +19,30 @@ function testConnection(conn) {
});
}
function writeRecords(records, opts = {}) {
const options = Object.assign({
host,
port,
path: '/api/customers',
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
}, opts);
return Promise.all(records.map(record => new Promise((resolve, reject) => {
const req = http.request(options, (res) => {
res.setEncoding('utf8');
res.on('data', () => {});
res.on('end', resolve);
});
req.on('error', reject);
req.write(JSON.stringify(record));
req.end();
})));
}
function populateDatabase(model) {
console.log('Populating model:', model);
let task = false;
@@ -25,35 +50,20 @@ function populateDatabase(model) {
switch (model.toLowerCase()) {
case 'customers':
task = fetchCustomers(37)
.then((customers) => {
const tasks = customers.map((customer) => {
return new Promise((resolve, reject) => {
const options = {
host,
port,
path: '/api/customers',
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
};
const req = http.request(options, (res) => {
res.setEncoding('utf8');
res.on('data', () => {});
res.on('end', resolve);
});
req.on('error', reject)
req.write(JSON.stringify(customer));
req.end();
});
});
return Promise.all(tasks);
})
.then(customers => writeRecords(customers, {
path: '/api/customers',
}))
.then(results => console.log('Customer(s) added', results.length));
break;
case 'products':
task = fetchProducts(25)
.then(customers => writeRecords(customers, {
path: '/api/products',
}))
.then(results => console.log('Product(s) added', results.length));
break;
default:
throw new Error(`Model not found or supported: ${model}`);
}