From 564a3f18036d22ef835cb4cfa218ae386169e7f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2=20Belli?= Date: Sun, 11 Jun 2017 19:47:32 +0200 Subject: [PATCH] Step 17.21: Update users publication to publish Facebook friends --- api/server/publications.ts | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/api/server/publications.ts b/api/server/publications.ts index 883092fc4..c00f74364 100644 --- a/api/server/publications.ts +++ b/api/server/publications.ts @@ -3,6 +3,7 @@ import { Users } from './collections/users'; import { Messages } from './collections/messages'; import { Chats } from './collections/chats'; import { Pictures } from './collections/pictures'; +import { facebookService } from "./services/facebook"; Meteor.publishComposite('users', function( pattern: string, @@ -14,13 +15,31 @@ Meteor.publishComposite('users', function( let selector = {}; + var facebookFriendsIds: string[] = []; + if (Users.collection.findOne({'_id': this.userId}).services.facebook) { + //FIXME: add definitions for the promise Meteor package + //TODO: handle error: token may be expired + const accessToken = (Promise).await(facebookService.getAccessToken(this.userId)); + //TODO: handle error: user may have denied permissions + const facebookFriends = (Promise).await(facebookService.getFriends(accessToken)); + facebookFriendsIds = facebookFriends.map((friend) => friend.id); + } + if (pattern) { selector = { 'profile.name': { $regex: pattern, $options: 'i' }, - 'phone.number': {$in: contacts} + $or: [ + {'phone.number': {$in: contacts}}, + {'services.facebook.id': {$in: facebookFriendsIds}} + ] }; } else { - selector = {'phone.number': {$in: contacts}} + selector = { + $or: [ + {'phone.number': {$in: contacts}}, + {'services.facebook.id': {$in: facebookFriendsIds}} + ] + } } return {