diff --git a/src/controllers/api.coffee b/src/controllers/api.coffee index 231e7e5365..bc605d05ef 100644 --- a/src/controllers/api.coffee +++ b/src/controllers/api.coffee @@ -11,6 +11,7 @@ sanitize = validator.sanitize utils = require 'derby-auth/utils' derbyAuthUtil = require('derby-auth/utils') User = require('./../models/user').model +Group = require('./../models/group').model api = module.exports @@ -369,6 +370,40 @@ api.revive = (req, res, next) -> return res.json(500,{err}) if err res.json 200, saved +### + ------------------------------------------------------------------------ + Party + ------------------------------------------------------------------------ +### +api.getGroups = (req, res, next) -> + {user} = res.locals + async.parallel + party: (cb) -> + async.waterfall [ + (cb2) -> + Group.findOne {type:'party', members: {'$in': [user?._id]}}, cb2 + (party, cb2) -> + party = party.toJSON() + query = _id: '$in': party.members + fields = 'profile preferences items stats achievements party backer auth.local.username auth.facebook.first_name auth.facebook.last_name auth.facebook.name auth.facebook.username'.split(' ') + fields = _.reduce fields, ((m,k,v) -> m[k] = 1;m),{} + User.find query, fields, (err, members) -> + party.members = members + cb2(err, party) + ], (err, members) -> cb(err, members) + + guilds: (cb) -> + return cb(null, {}) + Group.findOne {type:'guild', members: {'$in': [user?._id]}}, cb + + public: (cb) -> + return cb(null, {}) + Group.find {privacy: 'public'}, {name:1, description:1, members:1}, cb + + , (err, results) -> +# console.log {arguments} + return res.json 500,{err} if err + res.json results ### ------------------------------------------------------------------------ diff --git a/src/models/group.coffee b/src/models/group.coffee new file mode 100644 index 0000000000..acd7e61726 --- /dev/null +++ b/src/models/group.coffee @@ -0,0 +1,34 @@ +mongoose = require("mongoose") +Schema = mongoose.Schema +helpers = require('habitrpg-shared/script/helpers') +_ = require('lodash') + +GroupSchema = new Schema( + + _id: {type: String, 'default': helpers.uuid} + name: String + description: String + leader: {type: String, ref: 'User'} + members: [{type: String, ref: 'User'}] + invites: [{type: String, ref: 'User'}] + type: {type: String, enum: ['guild', 'party']} + privacy: {type: String, enum: ['private', 'public']} + _v: {Number, 'default': 0} + chat: Array +# [{ +# timestamp: Date +# user: String +# text: String +# contributor: String +# uuid: String +# id: String +# }] + balance: Number + logo: String + leaderMessage: String + + +, {strict: 'throw'}) + +module.exports.schema = GroupSchema +module.exports.model = mongoose.model("Group", GroupSchema) \ No newline at end of file diff --git a/src/routes/api.coffee b/src/routes/api.coffee index 67a959ab59..0514a4af78 100644 --- a/src/routes/api.coffee +++ b/src/routes/api.coffee @@ -43,4 +43,7 @@ router.put '/user', auth, cron, api.updateUser router.post '/user/revive', auth, cron, api.revive router.post '/user/batch-update', auth, cron, api.batchUpdate +# Groups +router.get '/groups', auth, api.getGroups + module.exports = router \ No newline at end of file diff --git a/src/server.coffee b/src/server.coffee index 35e2af2286..3d4c4889bd 100644 --- a/src/server.coffee +++ b/src/server.coffee @@ -12,6 +12,7 @@ require('./errors') mongoose = require('mongoose') require('./models/user') # load up the user schema - TODO is this necessary? +require('./models/group') module.exports = server # Connect using Mongoose too for API purposes, we'll eventually phase out Derby and only use mongoose