UNPKG

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
"use strict"; 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