port push notifications in api v3

This commit is contained in:
Matteo Pagliazzi
2016-02-19 20:34:55 +01:00
parent 624c0da5ab
commit fb343f8feb
10 changed files with 34 additions and 13 deletions

View File

@@ -11,7 +11,7 @@ var logging = require('./../../libs/api-v2/logging');
var csv = require('express-csv');
var utils = require('../../libs/api-v2/utils');
var api = module.exports;
var pushNotify = require('./../pushNotifications');
var pushNotify = require('./pushNotifications');
/*
------------------------------------------------------------------------

View File

@@ -17,7 +17,7 @@ var Challenge = require('./../../models/challenge').model;
var EmailUnsubscription = require('./../../models/emailUnsubscription').model;
var isProd = nconf.get('NODE_ENV') === 'production';
var api = module.exports;
var pushNotify = require('./../pushNotifications');
var pushNotify = require('./pushNotifications');
var analytics = utils.analytics;
var firebase = require('../../libs/api-v2/firebase');

View File

@@ -7,7 +7,7 @@ var _ = require('lodash');
var shared = require('../../../../common');
var utils = require('../../libs/api-v2/utils');
var nconf = require('nconf');
var pushNotify = require('./../pushNotifications');
var pushNotify = require('./pushNotifications');
var fetchMember = function(uuid, restrict){
return function(cb){

View File

@@ -17,7 +17,7 @@ import {
import shared from '../../../../common';
import * as Tasks from '../../models/task';
import { sendTxn as txnEmail } from '../../libs/api-v3/email';
import pushNotify from '../../libs/api-v3/pushNotifications';
import { sendNotification as sendPushNotification } from '../../libs/api-v3/pushNotifications';
import Q from 'q';
import csvStringify from '../../libs/api-v3/csvStringify';
@@ -471,7 +471,7 @@ async function _closeChal (challenge, broken = {}) {
]);
}
pushNotify(savedWinner, shared.i18n.t('wonChallenge'), challenge.name); // TODO translate
sendPushNotification(savedWinner, shared.i18n.t('wonChallenge'), challenge.name); // TODO translate
}
// Run some operations in the background withouth blocking the thread

View File

@@ -21,7 +21,8 @@ import { removeFromArray } from '../../libs/api-v3/collectionManipulators';
import * as firebase from '../../libs/api-v3/firebase';
import { sendTxn as sendTxnEmail } from '../../libs/api-v3/email';
import { encrypt } from '../../libs/api-v3/encryption';
import common from '../../../../common';
import { sendNotification as sendPushNotification } from '../../libs/api-v3/pushNotifications';
let api = {};
// TODO shall we accept party as groupId in all routes?
@@ -510,6 +511,12 @@ async function _inviteByUUID (uuid, group, inviter, req, res) {
sendTxnEmail(userToInvite, `invited-${groupLabel}`, emailVars);
}
sendPushNotification(
userToInvite,
common.i18n.t(group.type === 'guild' ? 'invitedGuild' : 'invitedParty'),
group.name
);
let userInvited = await userToInvite.save();
if (group.type === 'guild') {
return userInvited.invitations.guilds[userToInvite.invitations.guilds.length - 1];

View File

@@ -17,6 +17,8 @@ import {
sendTxn as sendTxnEmail,
} from '../../libs/api-v3/email';
import { quests as questScrolls } from '../../../../common/script/content';
import common from '../../../../common';
import { sendNotification as sendPushNotification } from '../../libs/api-v3/pushNotifications';
function canStartQuestAutomatically (group) {
// If all members are either true (accepted) or false (rejected) return true
@@ -62,7 +64,7 @@ api.inviteToQuest = {
let members = await User.find({
'party._id': group._id,
_id: {$ne: user._id},
}).select('auth.facebook auth.local preferences.emailNotifications profile.name')
}).select('auth.facebook auth.local preferences.emailNotifications profile.name pushDevices')
.exec();
group.markModified('quest');
@@ -102,6 +104,13 @@ api.inviteToQuest = {
// send out invites
let inviterVars = getUserInfo(user, ['name', 'email']);
let membersToEmail = members.filter(member => {
// send push notifications while filtering members before sending emails
sendPushNotification(
member,
common.i18n.t('questInvitationTitle'),
common.i18n.t('questInvitationInfo', { quest: quest.text() })
);
return member.preferences.emailNotifications.invitedQuest !== false;
});
sendTxnEmail(membersToEmail, `invite-${quest.boss ? 'boss' : 'collection'}-quest`, [

View File

@@ -12,7 +12,7 @@ var async = require('async');
var iap = require('./iap');
var mongoose= require('mongoose');
var cc = require('coupon-code');
var pushNotify = require('./../pushNotifications');
var pushNotify = require('./../api-v2/pushNotifications');
function revealMysteryItems(user) {
_.each(shared.content.gear.flat, function(item) {

View File

@@ -25,11 +25,11 @@ if (gcm) {
}
// TODO test
export default function sendNotify (user, title, message, timeToLive = 15) {
export default function sendNotification (user, title, message, timeToLive = 15) {
// TODO need investigation:
// https://github.com/HabitRPG/habitrpg/issues/5252
if (!user) throw new Error('User is required');
if (!user) throw new Error('User is required.');
_.each(user.pushDevices, pushDevice => {
switch (pushDevice.type) {
@@ -50,6 +50,7 @@ export default function sendNotify (user, title, message, timeToLive = 15) {
break;
case 'ios':
// TODO implement
break;
}
});

View File

@@ -15,6 +15,7 @@ import { sendTxn as sendTxnEmail } from '../libs/api-v3/email';
import { quests as questScrolls } from '../../../common/script/content';
import Q from 'q';
import nconf from 'nconf';
import { sendNotification as sendPushNotification } from '../libs/api-v3/pushNotifications';
let Schema = mongoose.Schema;
@@ -306,9 +307,12 @@ schema.methods.startQuest = async function startQuest (user) {
// send notifications in the background without blocking
User.find(
{ _id: { $in: nonUserQuestMembers } },
'party.quest items.quests auth.facebook auth.local preferences.emailNotifications profile.name',
).exec().then(membersToEmail => {
membersToEmail = _.filter(membersToEmail, (member) => {
'party.quest items.quests auth.facebook auth.local preferences.emailNotifications pushDevices profile.name',
).exec().then(membersToNotify => {
let membersToEmail = _.filter(membersToNotify, (member) => {
// send push notifications and filter users that disabled emails
sendPushNotification(user, 'HabitRPG', `${shared.i18n.t('questStarted')}: ${quest.text()}`);
return member.preferences.emailNotifications.questStarted !== false &&
member._id !== user._id;
});