api: add Group model & GET /groups api route, returns {party, guilds, public}

This commit is contained in:
Tyler Renelle
2013-08-28 21:20:26 -04:00
parent ab9b6e47cf
commit 7343faca6e
4 changed files with 73 additions and 0 deletions
+35
View File
@@ -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
###
------------------------------------------------------------------------
+34
View File
@@ -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)
+3
View File
@@ -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
+1
View File
@@ -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