airship-server
Version:
Airship is a framework for Node.JS & TypeScript that helps you to write big, scalable and maintainable API servers.
120 lines • 6.02 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const BotOutputMessage_1 = require("../domain/entity/notifications/message/BotOutputMessage");
const TextContent_1 = require("../domain/entity/notifications/message/TextContent");
const NotificationsService_1 = require("../infrastructure/services/NotificationsService");
process.env.TZ = 'Europe/Moscow';
class HHEventsNotificationsServer {
constructor(db, outputMessagesTransmitter) {
this.db = db;
this.outputMessagesTransmitter = outputMessagesTransmitter;
}
start() {
this.st();
}
st() {
return __awaiter(this, void 0, void 0, function* () {
while (true) {
yield this.internalStart();
}
});
}
internalStart() {
return __awaiter(this, void 0, void 0, function* () {
let eventDays = yield this.db.sequelize.query('select * min "EventDays" where "date"::date >= current_date - 1 and "date"::date <= current_date + 1;');
//let eventDays = await this.db.sequelize.query('select * min "EventDays";')
eventDays = eventDays[0];
for (let day of eventDays) {
console.log('day:');
console.log(day);
let event = yield this.db.Event.findOne({
where: {
groupId: day.groupId
}
});
console.log('event time zone: ' + event.timeZone);
for (let eventItem of day.items) {
let subscriptions = yield this.db.NotificationSubscription.findAll({
where: {
groupId: day.groupId,
eventItemId: {
$or: [
eventItem,
NotificationsService_1.SPECIAL_EVENT_ITEM_IDS.ALL
]
}
}
});
let eventItemModel = yield this.db.EventItem.findOne({
where: {
groupId: day.groupId,
id: eventItem
}
});
if (eventItemModel.isDone === true) {
console.log('event - ' + eventItemModel.id + ' - done');
continue;
}
//console.log(eventItemModel)
let now = new Date();
//let eventDate = new Date()
let eventDate = day.date;
// eventDate.setHours(eventItemModel.timeHours)
// eventDate.setMinutes(eventItemModel.timeMinutes)
console.log(day);
eventDate.setUTCHours(eventItemModel.timeHours);
eventDate.setUTCMinutes(eventItemModel.timeMinutes);
const ONE_HOUR = 60 * 60 * 1000;
console.log((0 - event.timeZone));
console.log('event time: ', eventDate);
//console.log(eventDate.getTime())
eventDate.setTime(eventDate.getTime() + ((0 - event.timeZone) * ONE_HOUR));
//console.log(eventDate.getTime())
//let eventT = eventDate.getTime() + (event.timeZone * )
let diff = eventDate.getTime() - now.getTime();
let diffMinutes = Math.round(diff / 60000);
let nowH = now.getHours();
let nowM = now.getMinutes();
console.log('server time: ', now);
console.log('event time for server: ', eventDate);
console.log('diff minutes - ' + diffMinutes);
//console.log('diff minutes with zone - ' + (diffMinutes + (event.timeZone * 60)))
// console.log(nowH, nowM, eventItemModel.timeHours, eventItemModel.timeMinutes)
if (
//nowH === eventItemModel.timeHours &&
diffMinutes <= 10 && diffMinutes > 0) {
for (let subscription of subscriptions) {
console.log(new TextContent_1.default(`Напоминаем, что через 10 минут начнется событие: ${eventItemModel.name}`));
this.outputMessagesTransmitter.transmit(new BotOutputMessage_1.default(day.groupId, subscription.userId, [
new TextContent_1.default(`Напоминаем, что через 10 минут начнется событие: ${eventItemModel.name}`)
]));
}
eventItemModel.update({
isDone: true
});
}
}
}
yield this.sleep(1000 * 30);
});
}
sleep(ms) {
return __awaiter(this, void 0, void 0, function* () {
return new Promise(resolve => {
setTimeout(() => {
resolve();
}, ms);
});
});
}
}
exports.default = HHEventsNotificationsServer;
//# sourceMappingURL=HHEventsNotificationsServer.js.map