diff --git a/website/src/controllers/api-v3/groups.js b/website/src/controllers/api-v3/groups.js index 7074168198..ad12f9e7cc 100644 --- a/website/src/controllers/api-v3/groups.js +++ b/website/src/controllers/api-v3/groups.js @@ -6,10 +6,56 @@ import { model as Group } from '../../models/group'; import { NotFound, BadRequest, + NotAuthorized, } from '../../libs/api-v3/errors'; +import firebase from '../../libs/api-v3/firebase'; let api = {}; +/** + * @api {post} /groups Create group + * @apiVersion 3.0.0 + * @apiName CreateGroup + * @apiGroup Group + * + * @apiSuccess {Object} group The group object + */ +api.createGroup = { + method: 'POST', + url: '/groups', + middlewares: [authWithHeaders(), cron], + handler (req, res, next) { + let user = res.locals.user; + let group = new Group(req.body); // TODO validate empty body + + group.leader = user._id; + + if (group.type === 'guild') { + if (user.balance < 1) return next(new NotAuthorized(res.t('messageInsufficientGems'))); + + group.balance = 1; + user.balance--; + + user.guilds.push(group._id); + } else { + if (user.party._id) return next(new NotAuthorized(res.t('messageGroupAlreadyInParty'))); + user.party._id = group._id; + } + + Q.all([ + user.save(), + group.save(), + ]).then(results => { + let savedGroup = results[1]; + + firebase.updateGroupData(savedGroup); + firebase.addUserToGroup(savedGroup._id, user._id); + return res.respond(201, savedGroup); // TODO populate + }) + .catch(next); + }, +}; + /** * @api {get} /groups Get groups * @apiVersion 3.0.0