api: add Group model & GET /groups api route, returns {party, guilds, public}
This commit is contained in:
@@ -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
|
||||
|
||||
###
|
||||
------------------------------------------------------------------------
|
||||
|
||||
@@ -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)
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user