151 lines
4.5 KiB
JavaScript
151 lines
4.5 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) => {
|
|
const doc = {
|
|
productTitle: product.productTitle,
|
|
productTags: product.productTags,
|
|
productDescription: product.productDescription,
|
|
id: product._id
|
|
};
|
|
lunrIndex.add(doc);
|
|
});
|
|
});
|
|
|
|
app.productsIndex = productsIndex;
|
|
if(process.env.NODE_ENV !== 'test'){
|
|
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) => {
|
|
const doc = {
|
|
email: customer.email,
|
|
name: `${customer.firstName} ${customer.lastName}`,
|
|
phone: customer.phone,
|
|
id: customer._id
|
|
};
|
|
lunrIndex.add(doc);
|
|
});
|
|
});
|
|
|
|
app.customersIndex = customersIndex;
|
|
if(process.env.NODE_ENV !== 'test'){
|
|
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) => {
|
|
const doc = {
|
|
orderLastname: order.orderLastname,
|
|
orderEmail: order.orderEmail,
|
|
orderPostcode: order.orderPostcode,
|
|
id: order._id
|
|
};
|
|
lunrIndex.add(doc);
|
|
});
|
|
});
|
|
|
|
app.ordersIndex = ordersIndex;
|
|
if(process.env.NODE_ENV !== 'test'){
|
|
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) => {
|
|
if(process.env.NODE_ENV !== 'test'){
|
|
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
|
|
};
|