Menu randomizer turned on
Ecosystem added for pm2 New pug file for emails.
This commit is contained in:
parent
5b4d9068a9
commit
2b127452ac
8
ecosystem.config.js
Normal file
8
ecosystem.config.js
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
module.exports = {
|
||||||
|
'apps' : [{
|
||||||
|
'name': 'Menu Server',
|
||||||
|
'script': './server/server.js',
|
||||||
|
'watch': './server/server.js'
|
||||||
|
}]
|
||||||
|
|
||||||
|
};
|
6
package-lock.json
generated
6
package-lock.json
generated
@ -4732,9 +4732,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"opencollective-postinstall": {
|
"opencollective-postinstall": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/opencollective-postinstall/-/opencollective-postinstall-2.0.3.tgz",
|
||||||
"integrity": "sha512-pVOEP16TrAO2/fjej1IdOyupJY8KDUM1CvsaScRbw6oddvpQoOfGk4ywha0HKKVAD6RkW4x6Q+tNBwhf3Bgpuw=="
|
"integrity": "sha512-8AV/sCtuzUeTo8gQK5qDZzARrulB3egtLzFgteqB2tcT4Mw7B8Kt7JcDHmltjz6FOAHsvTevk70gZEbhM4ZS9Q=="
|
||||||
},
|
},
|
||||||
"optimist": {
|
"optimist": {
|
||||||
"version": "0.6.1",
|
"version": "0.6.1",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "menuserver",
|
"name": "menuserver",
|
||||||
"version": "1.0.0",
|
"version": "2.0.0",
|
||||||
"description": "",
|
"description": "",
|
||||||
"main": "server.js",
|
"main": "server.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
19
pug/emailV2.pug
Normal file
19
pug/emailV2.pug
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
html(lang="en")
|
||||||
|
head
|
||||||
|
meta(charset='utf-8')
|
||||||
|
title
|
||||||
|
Suggestions
|
||||||
|
body
|
||||||
|
h1 Suggestions for !{ts}
|
||||||
|
h2 Mains
|
||||||
|
ol
|
||||||
|
each item in menu
|
||||||
|
li: a(href=item.url)= item.name
|
||||||
|
|
||||||
|
H2 Soup
|
||||||
|
ul
|
||||||
|
li: a(href=soup.url)= soup.name
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
small V2.00
|
11
server.js
11
server.js
@ -6,6 +6,8 @@ const path = require('path');
|
|||||||
const helmet = require('helmet');
|
const helmet = require('helmet');
|
||||||
const cors = require('cors');
|
const cors = require('cors');
|
||||||
|
|
||||||
|
const cron = require('node-cron');
|
||||||
|
|
||||||
const db = require('./server/lib/loginmanager');
|
const db = require('./server/lib/loginmanager');
|
||||||
|
|
||||||
const doJob = require('./server/lib/job');
|
const doJob = require('./server/lib/job');
|
||||||
@ -86,6 +88,11 @@ app.listen(serverPort, () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
((() => {
|
((() => {
|
||||||
console.log('Menuizer started');
|
console.log('Menuserver 2.0 started');
|
||||||
// doJob();
|
|
||||||
})());
|
})());
|
||||||
|
|
||||||
|
cron.schedule('0 8 * * 6', function () {
|
||||||
|
doJob();
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
});
|
||||||
|
@ -3,6 +3,7 @@ class FoodObj {
|
|||||||
constructor(limit) {
|
constructor(limit) {
|
||||||
this.limit = limit;
|
this.limit = limit;
|
||||||
this.store = [];
|
this.store = [];
|
||||||
|
this.soup = {};
|
||||||
this.types = [0, 0, 0, 0, 0, 0, 0];
|
this.types = [0, 0, 0, 0, 0, 0, 0];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,9 +32,27 @@ class FoodObj {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
addSoup(item) {
|
||||||
|
item.url = `https://menu.silvrtree.co.uk/view/${item.short}`;
|
||||||
|
this.soup = item;
|
||||||
|
}
|
||||||
|
|
||||||
|
soupID() {
|
||||||
|
return this.soup._id || null;
|
||||||
|
}
|
||||||
|
|
||||||
count() {
|
count() {
|
||||||
return (this.store.slice(0, 5).length);
|
return (this.store.slice(0, 5).length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
forPug() {
|
||||||
|
const output = { 'menu':null, 'soup':null };
|
||||||
|
|
||||||
|
output.menu = [...this.getFirstFive()];
|
||||||
|
output.soup = this.soup;
|
||||||
|
|
||||||
|
return output;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = FoodObj;
|
module.exports = FoodObj;
|
||||||
|
@ -126,6 +126,21 @@ exports.getRandom = (timestamp) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
exports.getRandomSoup = (timestamp) => {
|
||||||
|
const sql = 'SELECT _id, short, hash, name, meat, mealtype FROM menu where mealtype =2 and lastused<? order by RANDOM() LIMIT 1';
|
||||||
|
|
||||||
|
const sqlTimestamp = ~~(timestamp / 1000);
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
db.get(sql, [sqlTimestamp], (err, row) => {
|
||||||
|
if (err)
|
||||||
|
reject(err);
|
||||||
|
|
||||||
|
if (!err) resolve(row);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
exports.updateTimestamps = (newTimestamp, items) => {
|
exports.updateTimestamps = (newTimestamp, items) => {
|
||||||
const sqlTimestamp = ~~(newTimestamp / 1000);
|
const sqlTimestamp = ~~(newTimestamp / 1000);
|
||||||
|
|
||||||
|
@ -16,15 +16,13 @@ const email = require('smtp-email-sender')({
|
|||||||
});
|
});
|
||||||
|
|
||||||
function sendSMTP(data, newPath) {
|
function sendSMTP(data, newPath) {
|
||||||
const now = new Date();
|
const html = pug.renderFile(`${newPath}/` + 'pug/emailV2.pug', data);
|
||||||
|
|
||||||
const html = pug.renderFile(`${newPath}/` + 'pug/email.pug', data);
|
|
||||||
email({
|
email({
|
||||||
'from': 'Aida <aida@caliban.io>',
|
'from': 'Aida <aida@caliban.io>',
|
||||||
'to': 'Aida <aida@caliban.io>',
|
'to': 'Aida <aida@caliban.io>',
|
||||||
// 'bcc': 'Martin <martind2000@gmail.com>, Jessica <ing.arvid@gmail.com>',
|
// 'bcc': 'Martin <martind2000@gmail.com>, Jessica <ing.arvid@gmail.com>',
|
||||||
'bcc': 'Martin <martind2000@gmail.com>',
|
'bcc': 'Martin <martind2000@gmail.com>',
|
||||||
'subject': `Suggestions 🍽️ - ${dateFormat(now, 'dddd, mmmm dS, yyyy')}`,
|
'subject': `Suggestions 🍽️ - ${data.ts}`,
|
||||||
'html': html
|
'html': html
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -42,20 +40,28 @@ async function doJob() {
|
|||||||
const fo = new FoodObj(2);
|
const fo = new FoodObj(2);
|
||||||
|
|
||||||
await dbmanager.getRandom(pastTS).then((r) => {
|
await dbmanager.getRandom(pastTS).then((r) => {
|
||||||
// console.log(r);
|
|
||||||
|
|
||||||
for(const item of r)
|
for(const item of r)
|
||||||
fo.add(item);
|
fo.add(item);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
await dbmanager.getRandomSoup(pastTS).then((r) => {
|
||||||
|
fo.addSoup(r);
|
||||||
|
});
|
||||||
|
|
||||||
if (fo.count() === 5) {
|
if (fo.count() === 5) {
|
||||||
sendSMTP({ 'suggestions':fo.getFirstFive() }, './');
|
const data = fo.forPug();
|
||||||
await dbmanager.updateTimestamps(currentTS, fo.getFirstFiveIDs()).then((r) => {
|
data.ts = dateFormat(now, 'dddd, mmmm dS, yyyy');
|
||||||
|
|
||||||
|
sendSMTP(data, './');
|
||||||
|
|
||||||
|
const ids = [...fo.getFirstFiveIDs(), fo.soupID()];
|
||||||
|
|
||||||
|
await dbmanager.updateTimestamps(currentTS, ids).then((r) => {
|
||||||
console.log(r);
|
console.log(r);
|
||||||
});
|
});
|
||||||
} else {
|
|
||||||
console.log(`Not enough items, only got ${fo.count()}`);
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
console.log(`Not enough items, only got ${fo.count()}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = doJob;
|
module.exports = doJob;
|
||||||
|
26
tests/db.js
26
tests/db.js
@ -5,6 +5,9 @@ const test = _test(tape); // decorate tape
|
|||||||
const dbmanager = require('../server/lib/dbmanager');
|
const dbmanager = require('../server/lib/dbmanager');
|
||||||
const FoodObj = require('../server/lib/FoodObj');
|
const FoodObj = require('../server/lib/FoodObj');
|
||||||
|
|
||||||
|
const pug = require('pug');
|
||||||
|
const dateFormat = require('dateformat');
|
||||||
|
|
||||||
test('DB tests', async function(t) {
|
test('DB tests', async function(t) {
|
||||||
const now = new Date();
|
const now = new Date();
|
||||||
const currentTS = ~~(now.getTime() / 86400000) * 86400000;
|
const currentTS = ~~(now.getTime() / 86400000) * 86400000;
|
||||||
@ -15,19 +18,26 @@ test('DB tests', async function(t) {
|
|||||||
const fo = new FoodObj(2);
|
const fo = new FoodObj(2);
|
||||||
|
|
||||||
await dbmanager.getRandom(pastTS).then((r) => {
|
await dbmanager.getRandom(pastTS).then((r) => {
|
||||||
// console.log(r);
|
|
||||||
|
|
||||||
for(const item of r)
|
for(const item of r)
|
||||||
fo.add(item);
|
fo.add(item);
|
||||||
|
|
||||||
console.log(fo.getFirstFive());
|
|
||||||
|
|
||||||
console.log(fo.getFirstFiveIDs());
|
|
||||||
});
|
});
|
||||||
|
|
||||||
await dbmanager.updateTimestamps(currentTS, fo.getFirstFiveIDs()).then((r) => {
|
await dbmanager.getRandomSoup(pastTS).then((r) => {
|
||||||
|
fo.addSoup(r);
|
||||||
|
});
|
||||||
|
|
||||||
|
const data = fo.forPug();
|
||||||
|
data.ts = dateFormat(now, 'dddd, mmmm dS, yyyy');
|
||||||
|
|
||||||
|
const html = pug.renderFile( '../pug/emailV2.pug', data);
|
||||||
|
|
||||||
|
const ids = [...fo.getFirstFiveIDs(), fo.soupID()];
|
||||||
|
|
||||||
|
console.log(ids);
|
||||||
|
|
||||||
|
/* await dbmanager.updateTimestamps(currentTS, fo.getFirstFiveIDs()).then((r) => {
|
||||||
console.log(r);
|
console.log(r);
|
||||||
});
|
});*/
|
||||||
|
|
||||||
t.end();
|
t.end();
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user