Refactor/route separation #21
129
api/message.js
129
api/message.js
@@ -1,92 +1,109 @@
|
||||
const request = require("request");
|
||||
const https = require("https");
|
||||
const path = require("path");
|
||||
const config = require(path.join(__dirname + "/../config/defaults/lottery"));
|
||||
|
||||
async function sendMessage(winnerObject) {
|
||||
async function sendWineSelectMessage(winnerObject) {
|
||||
winnerObject.timestamp_sent = new Date().getTime();
|
||||
winnerObject.timestamp_limit = new Date().getTime() * 600000;
|
||||
await winnerObject.save();
|
||||
|
||||
let url = new URL(`/#/winner/${winnerObject.id}`, "https://lottis.vin");
|
||||
|
||||
await sendMessageToUser(
|
||||
return sendMessageToUser(
|
||||
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.)`
|
||||
);
|
||||
|
||||
return true;
|
||||
)
|
||||
}
|
||||
|
||||
async function sendWonWineMessage(winnerObject, wineObject) {
|
||||
console.log(
|
||||
`User ${winnerObject.id} is only one left, chosing wine for him/her.`
|
||||
);
|
||||
async function sendLastWinnerMessage(winnerObject, wineObject) {
|
||||
console.log(`User ${winnerObject.id} is only one left, chosing wine for him/her.`);
|
||||
winnerObject.timestamp_sent = new Date().getTime();
|
||||
winnerObject.timestamp_limit = new Date().getTime();
|
||||
await winnerObject.save();
|
||||
|
||||
await sendMessageToUser(
|
||||
return sendMessageToUser(
|
||||
winnerObject.phoneNumber,
|
||||
`Gratulerer som heldig vinner av vinlotteriet ${winnerObject.name}! Du har vunnet vinen ${wineObject.name}, og vil få nærmere info om hvordan/hvor du kan hente vinen snarest. Ha en ellers fin helg!`
|
||||
);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
async function sendMessageTooLate(winnerObject) {
|
||||
await sendMessageToUser(
|
||||
async function sendWineSelectMessageTooLate(winnerObject) {
|
||||
return sendMessageToUser(
|
||||
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.`
|
||||
);
|
||||
}
|
||||
|
||||
async function sendMessageToUser(phoneNumber, message) {
|
||||
try {
|
||||
request.post(
|
||||
{
|
||||
url: `https://gatewayapi.com/rest/mtsms?token=${config.gatewayToken}`,
|
||||
json: true,
|
||||
body: {
|
||||
sender: "Vinlottis",
|
||||
message: message,
|
||||
recipients: [{ msisdn: `47${phoneNumber}` }]
|
||||
}
|
||||
},
|
||||
function(err, r, body) {
|
||||
console.log(err ? err : body);
|
||||
if(err) {
|
||||
console.log(phoneNumber, message);
|
||||
}
|
||||
}
|
||||
);
|
||||
} catch(e) {
|
||||
console.log(phoneNumber, message);
|
||||
}
|
||||
console.log(`Attempting to send message to ${ phoneNumber }.`)
|
||||
|
||||
const body = {
|
||||
sender: "Vinlottis",
|
||||
message: message,
|
||||
recipients: [{ msisdn: `47${ phoneNumber }`}]
|
||||
};
|
||||
|
||||
return gatewayRequest(body);
|
||||
}
|
||||
|
||||
async function sendUpdate(winners) {
|
||||
|
||||
async function sendInitialMessageToWinners(winners) {
|
||||
let numbers = [];
|
||||
for (let i = 0; i < winners.length; i++) {
|
||||
numbers.push({ msisdn: `47${winners[i].phoneNumber}` });
|
||||
}
|
||||
request.post(
|
||||
{
|
||||
url: `https://gatewayapi.com/rest/mtsms?token=${config.gatewayToken}`,
|
||||
json: true,
|
||||
body: {
|
||||
sender: "Vinlottis",
|
||||
message:
|
||||
"Gratulerer som vinner av vinlottisen! Du vil snart få en SMS med oppdatering om hvordan gangen går!",
|
||||
recipients: numbers
|
||||
}
|
||||
},
|
||||
function(err, r, body) {
|
||||
console.log(err ? err : body);
|
||||
}
|
||||
);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
module.exports.sendUpdate = sendUpdate;
|
||||
module.exports.sendMessage = sendMessage;
|
||||
module.exports.sendMessageTooLate = sendMessageTooLate;
|
||||
module.exports.sendWonWineMessage = sendWonWineMessage;
|
||||
async function gatewayRequest(body) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const options = {
|
||||
hostname: "gatewayapi.com",
|
||||
post: 443,
|
||||
path: `/rest/mtsms?token=${ config.gatewayToken }`,
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json"
|
||||
}
|
||||
}
|
||||
|
||||
const req = https.request(options, (res) => {
|
||||
console.log(`statusCode: ${ res.statusCode }`);
|
||||
console.log(`statusMessage: ${ res.statusMessage }`);
|
||||
|
||||
res.setEncoding('utf8');
|
||||
|
||||
if (res.statusCode == 200) {
|
||||
res.on("data", (d) => resolve(JSON.parse(d)));
|
||||
} else {
|
||||
res.on("data", (data) => {
|
||||
data = JSON.parse(data);
|
||||
return reject('Gateway error: ' + data['message'] || data)
|
||||
});
|
||||
}
|
||||
})
|
||||
|
||||
req.on("error", (error) => {
|
||||
console.error(`Error from sms service: ${ error }`);
|
||||
reject(`Error from sms service: ${ error }`);
|
||||
})
|
||||
|
||||
req.write(JSON.stringify(body));
|
||||
req.end();
|
||||
});
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
sendWineSelectMessage,
|
||||
sendLastWinnerMessage,
|
||||
sendWineSelectMessageTooLate,
|
||||
sendInitialMessageToWinners
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user