Linting and more clear function names.

This commit is contained in:
2021-01-26 22:43:18 +01:00
parent 5e018f071d
commit 1b1a99ccc3

View File

@@ -2,34 +2,50 @@ const https = require("https");
const path = require("path"); const path = require("path");
const config = require(path.join(__dirname + "/../config/defaults/lottery")); const config = require(path.join(__dirname + "/../config/defaults/lottery"));
const dateString = (date) => { const dateString = date => {
if (typeof(date) == "string") { if (typeof date == "string") {
date = new Date(date); date = new Date(date);
} }
const ye = new Intl.DateTimeFormat('en', { year: 'numeric' }).format(date) const ye = new Intl.DateTimeFormat("en", { year: "numeric" }).format(date);
const mo = new Intl.DateTimeFormat('en', { month: '2-digit' }).format(date) const mo = new Intl.DateTimeFormat("en", { month: "2-digit" }).format(date);
const da = new Intl.DateTimeFormat('en', { day: '2-digit' }).format(date) const da = new Intl.DateTimeFormat("en", { day: "2-digit" }).format(date);
return `${da}-${mo}-${ye}` return `${da}-${mo}-${ye}`;
};
async function sendInitialMessageToWinners(winners) {
const numbers = winners.map(winner => ({ msisdn: `47${winner.phoneNumber}` }));
const body = {
sender: "Vinlottis",
message: "Gratulerer som vinner av vinlottisen! Du vil snart få en SMS med oppdatering om hvordan gangen går!",
recipients: numbers
};
return gatewayRequest(body);
} }
async function sendWineSelectMessage(winnerObject) { async function sendPrizeSelectionLink(winner) {
winnerObject.timestamp_sent = new Date().getTime(); winner.timestamp_sent = new Date().getTime();
winnerObject.timestamp_limit = new Date().getTime() * 600000; winner.timestamp_limit = new Date().getTime() + 1000 * 600;
await winnerObject.save(); await winner.save();
let url = new URL(`/#/winner/${winnerObject.id}`, "https://lottis.vin"); const { id, name, phoneNumber } = winner;
const url = new URL(`/#/winner/${id}`, "https://lottis.vin");
const message = `Gratulerer som heldig vinner av vinlotteriet ${name}! Her er linken for \
å velge hva slags vin du vil ha, du har 10 minutter på å velge ut noe før du blir lagt bakerst \
i køen. ${url.href}. (Hvis den siden kommer opp som tom må du prøve å refreshe siden noen ganger.`;
return sendMessageToUser( return sendMessageToNumber(phoneNumber, message);
winnerObject.phoneNumber,
`Gratulerer som heldig vinner av vinlotteriet ${winnerObject.name}! Her er linken for å velge hva slags vin du vil ha, du har 10 minutter på å velge ut noe før du blir lagt bakerst i køen. ${url.href}. (Hvis den siden kommer opp som tom må du prøve å refreshe siden noen ganger.)`
)
} }
async function sendWineConfirmation(winnerObject, wineObject, date) { async function sendWineConfirmation(winnerObject, wineObject, date) {
date = dateString(date); date = dateString(date);
return sendMessageToUser(winnerObject.phoneNumber, return sendMessageToNumber(
`Bekreftelse på din vin ${ winnerObject.name }.\nDato vunnet: ${ date }.\nVin valgt: ${ wineObject.name }.\nDu vil bli kontaktet av ${ config.name } ang henting. Ha en ellers fin helg!`) winnerObject.phoneNumber,
`Bekreftelse på din vin ${winnerObject.name}.\nDato vunnet: ${date}.\nVin valgt: ${wineObject.name}.\
\nDu vil bli kontaktet av ${config.name} ang henting. Ha en ellers fin helg!`
);
} }
async function sendLastWinnerMessage(winnerObject, wineObject) { async function sendLastWinnerMessage(winnerObject, wineObject) {
@@ -38,84 +54,69 @@ async function sendLastWinnerMessage(winnerObject, wineObject) {
winnerObject.timestamp_limit = new Date().getTime(); winnerObject.timestamp_limit = new Date().getTime();
await winnerObject.save(); await winnerObject.save();
return sendMessageToUser( return sendMessageToNumber(
winnerObject.phoneNumber, winnerObject.phoneNumber,
`Gratulerer som heldig vinner av vinlotteriet ${winnerObject.name}! Du har vunnet vinen ${wineObject.name}, du vil bli kontaktet av ${ config.name } ang henting. Ha en ellers fin helg!` `Gratulerer som heldig vinner av vinlotteriet ${winnerObject.name}! Du har vunnet vinen ${wineObject.name}, \
du vil bli kontaktet av ${config.name} ang henting. Ha en ellers fin helg!`
); );
} }
async function sendWineSelectMessageTooLate(winnerObject) { async function sendWineSelectMessageTooLate(winnerObject) {
return sendMessageToUser( return sendMessageToNumber(
winnerObject.phoneNumber, winnerObject.phoneNumber,
`Hei ${winnerObject.name}, du har dessverre brukt mer enn 10 minutter på å velge premie og blir derfor puttet bakerst i køen. Du vil få en ny SMS når det er din tur igjen.` `Hei ${winnerObject.name}, du har dessverre brukt mer enn 10 minutter på å velge premie og blir derfor \
puttet bakerst i køen. Du vil få en ny SMS når det er din tur igjen.`
); );
} }
async function sendMessageToUser(phoneNumber, message) { async function sendMessageToNumber(phoneNumber, message) {
console.log(`Attempting to send message to ${ phoneNumber }.`) console.log(`Attempting to send message to ${phoneNumber}.`);
const body = { const body = {
sender: "Vinlottis", sender: "Vinlottis",
message: message, message: message,
recipients: [{ msisdn: `47${ phoneNumber }`}] recipients: [{ msisdn: `47${phoneNumber}` }]
}; };
return gatewayRequest(body); return gatewayRequest(body);
} }
async function sendInitialMessageToWinners(winners) {
let numbers = [];
for (let i = 0; i < winners.length; i++) {
numbers.push({ msisdn: `47${winners[i].phoneNumber}` });
}
const body = {
sender: "Vinlottis",
message:
"Gratulerer som vinner av vinlottisen! Du vil snart få en SMS med oppdatering om hvordan gangen går!",
recipients: numbers
}
return gatewayRequest(body);
}
async function gatewayRequest(body) { async function gatewayRequest(body) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const options = { const options = {
hostname: "gatewayapi.com", hostname: "gatewayapi.com",
post: 443, post: 443,
path: `/rest/mtsms?token=${ config.gatewayToken }`, path: `/rest/mtsms?token=${config.gatewayToken}`,
method: "POST", method: "POST",
headers: { headers: {
"Content-Type": "application/json" "Content-Type": "application/json"
} }
} };
const req = https.request(options, (res) => { const req = https.request(options, res => {
console.log(`statusCode: ${ res.statusCode }`); console.log(`statusCode: ${res.statusCode}`);
console.log(`statusMessage: ${ res.statusMessage }`); console.log(`statusMessage: ${res.statusMessage}`);
res.setEncoding('utf8'); res.setEncoding("utf8");
if (res.statusCode == 200) { if (res.statusCode == 200) {
res.on("data", (data) => { res.on("data", data => {
console.log("Response from message gateway:", data) console.log("Response from message gateway:", data);
resolve(JSON.parse(data)) resolve(JSON.parse(data));
}); });
} else { } else {
res.on("data", (data) => { res.on("data", data => {
data = JSON.parse(data); data = JSON.parse(data);
return reject('Gateway error: ' + data['message'] || data) return reject("Gateway error: " + data["message"] || data);
}); });
} }
}) });
req.on("error", (error) => { req.on("error", error => {
console.error(`Error from sms service: ${ error }`); console.error(`Error from sms service: ${error}`);
reject(`Error from sms service: ${ error }`); reject(`Error from sms service: ${error}`);
}) });
req.write(JSON.stringify(body)); req.write(JSON.stringify(body));
req.end(); req.end();
@@ -123,9 +124,9 @@ async function gatewayRequest(body) {
} }
module.exports = { module.exports = {
sendWineSelectMessage, sendInitialMessageToWinners,
sendPrizeSelectionLink,
sendWineConfirmation, sendWineConfirmation,
sendLastWinnerMessage, sendLastWinnerMessage,
sendWineSelectMessageTooLate, sendWineSelectMessageTooLate
sendInitialMessageToWinners };
}