pockybot
Version:
Spark bot that handles team recognition
65 lines (64 loc) • 3.47 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DefaultResultsService = void 0;
const constants_1 = require("../../constants");
const logger_1 = require("../logger");
const fs = require("fs");
const storage_1 = require("@google-cloud/storage");
const helpers_1 = require("../helpers/helpers");
class DefaultResultsService {
constructor(database, formatResultsService, pegService, winnersService) {
this.database = database;
this.formatResultsService = formatResultsService;
this.pegService = pegService;
this.winnersService = winnersService;
}
async returnResultsMarkdown() {
const now = new Date();
const todayString = now.getFullYear() + '-' + (now.getMonth() + 1) + '-' + now.getDate()
+ '-' + now.getHours() + '-' + now.getMinutes() + '-' + now.getSeconds();
const filePath = `${__dirname}/../../../pegs-${todayString}`;
if (fs.existsSync(filePath + '.txt')) {
fs.unlinkSync(filePath + '.txt');
}
logger_1.Logger.information("[ResultsService.returnResultsMarkdown] File path: " + filePath);
const fullData = await this.database.returnResults();
const allPegs = await this.pegService.getPegs(fullData);
const fullResults = this.getResults(allPegs);
const winners = this.winnersService.getWinners(allPegs);
const html = await this.formatResultsService.returnResultsHtml(fullResults, winners);
fs.writeFileSync(filePath + '.html', html);
const client = new storage_1.Storage();
let response = await client.bucket(process.env.GCLOUD_BUCKET_NAME).upload(filePath + '.html');
let file = response[0];
await file.makePublic();
const fileUrl = `${constants_1.default.googleUrl}${process.env.GCLOUD_BUCKET_NAME}/pegs-${todayString}.html`;
const markdown = `[Here are all pegs given this cycle](${fileUrl})`;
return markdown;
}
getResults(pegs) {
const allPegReceivers = helpers_1.distinct(pegs.map(peg => peg.receiverId));
const allPegSenders = helpers_1.distinct(pegs.map(peg => peg.senderId));
const allPeople = helpers_1.distinct(allPegSenders.concat(allPegReceivers));
let results = [];
allPeople.forEach(personId => {
const validPegsReceived = pegs.filter(peg => peg.receiverId === personId && peg.isValid);
const penaltyPegsGiven = pegs.filter(peg => peg.senderId === personId && !peg.isValid);
if (validPegsReceived.length > 0 || penaltyPegsGiven.length > 0) {
const validPegsTotal = validPegsReceived.reduce((a, b) => a + b.pegWeighting, 0);
const personName = validPegsReceived.length > 0 ? validPegsReceived[0].receiverName : penaltyPegsGiven[0].senderName;
const personLocation = validPegsReceived.length > 0 ? validPegsReceived[0].receiverLocation : penaltyPegsGiven[0].senderLocation;
results.push({
personId,
personName,
personLocation,
weightedPegsReceived: validPegsTotal - penaltyPegsGiven.length,
validPegsReceived,
penaltyPegsGiven
});
}
});
return results.sort((a, b) => a.weightedPegsReceived - b.weightedPegsReceived);
}
}
exports.DefaultResultsService = DefaultResultsService;