143 lines
4.3 KiB
JavaScript
143 lines
4.3 KiB
JavaScript
|
const colors = require('colors');
|
||
|
const lunr = require('lunr');
|
||
|
|
||
|
const indexProducts = (app) => {
|
||
|
// index all products in lunr on startup
|
||
|
return new Promise((resolve, reject) => {
|
||
|
app.db.products.find({}).toArray((err, productsList) => {
|
||
|
if(err){
|
||
|
console.error(colors.red(err.stack));
|
||
|
reject(err);
|
||
|
}
|
||
|
|
||
|
// setup lunr indexing
|
||
|
const productsIndex = lunr(function(){
|
||
|
this.field('productTitle', { boost: 10 });
|
||
|
this.field('productTags', { boost: 5 });
|
||
|
this.field('productDescription');
|
||
|
|
||
|
const lunrIndex = this;
|
||
|
|
||
|
// add to lunr index
|
||
|
productsList.forEach((product) => {
|
||
|
let doc = {
|
||
|
'productTitle': product.productTitle,
|
||
|
'productTags': product.productTags,
|
||
|
'productDescription': product.productDescription,
|
||
|
'id': product._id
|
||
|
};
|
||
|
lunrIndex.add(doc);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
app.productsIndex = productsIndex;
|
||
|
console.log(colors.cyan('- Product indexing complete'));
|
||
|
resolve();
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
const indexCustomers = (app) => {
|
||
|
// index all products in lunr on startup
|
||
|
return new Promise((resolve, reject) => {
|
||
|
app.db.customers.find({}).toArray((err, customerList) => {
|
||
|
if(err){
|
||
|
console.error(colors.red(err.stack));
|
||
|
reject(err);
|
||
|
}
|
||
|
|
||
|
// setup lunr indexing
|
||
|
const customersIndex = lunr(function(){
|
||
|
this.field('email', { boost: 10 });
|
||
|
this.field('name', { boost: 5 });
|
||
|
this.field('phone');
|
||
|
|
||
|
const lunrIndex = this;
|
||
|
|
||
|
// add to lunr index
|
||
|
customerList.forEach((customer) => {
|
||
|
let doc = {
|
||
|
'email': customer.email,
|
||
|
'name': `${customer.firstName} ${customer.lastName}`,
|
||
|
'phone': customer.phone,
|
||
|
'id': customer._id
|
||
|
};
|
||
|
lunrIndex.add(doc);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
app.customersIndex = customersIndex;
|
||
|
console.log(colors.cyan('- Customer indexing complete'));
|
||
|
resolve();
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
const indexOrders = (app, cb) => {
|
||
|
// index all orders in lunr on startup
|
||
|
return new Promise((resolve, reject) => {
|
||
|
app.db.orders.find({}).toArray((err, ordersList) => {
|
||
|
if(err){
|
||
|
console.error(colors.red('Error setting up products index: ' + err));
|
||
|
reject(err);
|
||
|
}
|
||
|
|
||
|
// setup lunr indexing
|
||
|
const ordersIndex = lunr(function(){
|
||
|
this.field('orderEmail', { boost: 10 });
|
||
|
this.field('orderLastname', { boost: 5 });
|
||
|
this.field('orderPostcode');
|
||
|
|
||
|
const lunrIndex = this;
|
||
|
|
||
|
// add to lunr index
|
||
|
ordersList.forEach((order) => {
|
||
|
let doc = {
|
||
|
'orderLastname': order.orderLastname,
|
||
|
'orderEmail': order.orderEmail,
|
||
|
'orderPostcode': order.orderPostcode,
|
||
|
'id': order._id
|
||
|
};
|
||
|
lunrIndex.add(doc);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
app.ordersIndex = ordersIndex;
|
||
|
console.log(colors.cyan('- Order indexing complete'));
|
||
|
resolve();
|
||
|
});
|
||
|
});
|
||
|
};
|
||
|
|
||
|
const fixProductDates = (products) => {
|
||
|
let index = 0;
|
||
|
products.forEach(() => {
|
||
|
products[index].productAddedDate = new Date();
|
||
|
index++;
|
||
|
});
|
||
|
return products;
|
||
|
};
|
||
|
|
||
|
// start indexing products and orders
|
||
|
const runIndexing = (app) => {
|
||
|
console.info(colors.yellow('Setting up indexes..'));
|
||
|
|
||
|
return Promise.all([
|
||
|
indexProducts(app),
|
||
|
indexOrders(app),
|
||
|
indexCustomers(app)
|
||
|
])
|
||
|
.catch((err) => {
|
||
|
console.info(colors.yellow('Error setting up indexes', err));
|
||
|
process.exit(2);
|
||
|
});
|
||
|
};
|
||
|
|
||
|
module.exports = {
|
||
|
indexProducts,
|
||
|
indexCustomers,
|
||
|
indexOrders,
|
||
|
fixProductDates,
|
||
|
runIndexing
|
||
|
};
|