Merge branch 'hotfix/21.56.9' into master
[gitter.git] / server / serializers / rest / group-strategy.js
blob9094e4d34823df1afcde760dba84d5a35d45834a
1 'use strict';
3 var Promise = require('bluebird');
4 var avatars = require('gitter-web-avatars');
5 var mongoUtils = require('gitter-web-persistence-utils/lib/mongo-utils');
6 var SecurityDescriptorStrategy = require('./security-descriptor-strategy');
7 var FavouriteGroupsForUserStrategy = require('./favourite-groups-for-user-strategy');
9 function GroupStrategy(options) {
10   this.options = options || {};
12   var securityDescriptorStrategy;
13   var favouriteStrategy;
15   this.preload = function() {
16     var options = this.options;
17     var currentUserId = mongoUtils.asObjectID(options.currentUserId);
18     var strategies = [];
20     securityDescriptorStrategy = SecurityDescriptorStrategy.slim();
22     if (currentUserId) {
23       // Favourites for user
24       favouriteStrategy = new FavouriteGroupsForUserStrategy({
25         currentUserId: options.currentUserId
26       });
27       strategies.push(favouriteStrategy.preload());
28     }
30     return Promise.all(strategies);
31   };
33   this.map = function(group) {
34     var options = this.options;
35     var id = group.id || (group._id && group._id.toHexString());
37     var hasAvatarSet = undefined;
38     if (options.includeHasAvatarSet) {
39       hasAvatarSet =
40         group.avatarVersion > 0 ||
41         group.sd.type === 'GH_ORG' ||
42         group.sd.type === 'GH_REPO' ||
43         group.sd.type === 'GH_USER';
44     }
46     return {
47       id: id,
48       name: group.name,
49       uri: group.uri,
50       favourite: favouriteStrategy ? favouriteStrategy.map(id) : undefined,
51       homeUri: group.homeUri,
52       backedBy: securityDescriptorStrategy.map(group.sd),
53       avatarUrl: avatars.getForGroup(group),
54       hasAvatarSet: hasAvatarSet
55     };
56   };
59 GroupStrategy.prototype = {
60   name: 'GroupStrategy'
63 module.exports = GroupStrategy;