REST API - Meteor 1.4 - first step issue

This commit is contained in:
Lauri Ojansivu 2017-04-27 20:49:24 +03:00
parent a99218e2c7
commit 0319bcf7bb
9 changed files with 361 additions and 137 deletions

View file

@ -1,7 +1,7 @@
// Sandstorm context is detected using the METEOR_SETTINGS environment variable
// in the package definition.
const isSandstorm = Meteor.settings && Meteor.settings.public &&
Meteor.settings.public.sandstorm;
Meteor.settings.public.sandstorm;
Users = Meteor.users;
Users.attachSchema(new SimpleSchema({
@ -148,32 +148,32 @@ Users.helpers({
},
starredBoards() {
const {starredBoards = []} = this.profile;
return Boards.find({archived: false, _id: {$in: starredBoards}});
const { starredBoards = [] } = this.profile;
return Boards.find({ archived: false, _id: { $in: starredBoards } });
},
hasStarred(boardId) {
const {starredBoards = []} = this.profile;
const { starredBoards = [] } = this.profile;
return _.contains(starredBoards, boardId);
},
invitedBoards() {
const {invitedBoards = []} = this.profile;
return Boards.find({archived: false, _id: {$in: invitedBoards}});
const { invitedBoards = [] } = this.profile;
return Boards.find({ archived: false, _id: { $in: invitedBoards } });
},
isInvitedTo(boardId) {
const {invitedBoards = []} = this.profile;
const { invitedBoards = [] } = this.profile;
return _.contains(invitedBoards, boardId);
},
hasTag(tag) {
const {tags = []} = this.profile;
const { tags = [] } = this.profile;
return _.contains(tags, tag);
},
hasNotification(activityId) {
const {notifications = []} = this.profile;
const { notifications = [] } = this.profile;
return _.contains(notifications, activityId);
},
@ -183,7 +183,7 @@ Users.helpers({
},
getEmailBuffer() {
const {emailBuffer = []} = this.profile;
const { emailBuffer = [] } = this.profile;
return emailBuffer;
},
@ -308,7 +308,7 @@ Users.mutations({
},
setAvatarUrl(avatarUrl) {
return { $set: { 'profile.avatarUrl': avatarUrl }};
return { $set: { 'profile.avatarUrl': avatarUrl } };
},
setShowCardsCountAt(limit) {
@ -323,7 +323,7 @@ Meteor.methods({
if (nUsersWithUsername > 0) {
throw new Meteor.Error('username-already-taken');
} else {
Users.update(this.userId, {$set: { username }});
Users.update(this.userId, { $set: { username } });
}
},
toggleSystemMessages() {
@ -346,19 +346,19 @@ if (Meteor.isServer) {
const inviter = Meteor.user();
const board = Boards.findOne(boardId);
const allowInvite = inviter &&
board &&
board.members &&
_.contains(_.pluck(board.members, 'userId'), inviter._id) &&
_.where(board.members, {userId: inviter._id})[0].isActive &&
_.where(board.members, {userId: inviter._id})[0].isAdmin;
board &&
board.members &&
_.contains(_.pluck(board.members, 'userId'), inviter._id) &&
_.where(board.members, { userId: inviter._id })[0].isActive &&
_.where(board.members, { userId: inviter._id })[0].isAdmin;
if (!allowInvite) throw new Meteor.Error('error-board-notAMember');
this.unblock();
const posAt = username.indexOf('@');
let user = null;
if (posAt>=0) {
user = Users.findOne({emails: {$elemMatch: {address: username}}});
if (posAt >= 0) {
user = Users.findOne({ emails: { $elemMatch: { address: username } } });
} else {
user = Users.findOne(username) || Users.findOne({ username });
}
@ -409,7 +409,7 @@ if (Meteor.isServer) {
});
Accounts.onCreateUser((options, user) => {
const userCount = Users.find().count();
if (!isSandstorm && userCount === 0 ){
if (!isSandstorm && userCount === 0) {
user.isAdmin = true;
return user;
}
@ -421,11 +421,11 @@ if (Meteor.isServer) {
if (!options || !options.profile) {
throw new Meteor.Error('error-invitation-code-blank', 'The invitation code is required');
}
const invitationCode = InvitationCodes.findOne({code: options.profile.invitationcode, email: options.email, valid: true});
const invitationCode = InvitationCodes.findOne({ code: options.profile.invitationcode, email: options.email, valid: true });
if (!invitationCode) {
throw new Meteor.Error('error-invitation-code-not-exist', 'The invitation code doesn\'t exist');
}else{
user.profile = {icode: options.profile.invitationcode};
} else {
user.profile = { icode: options.profile.invitationcode };
}
return user;
@ -445,7 +445,7 @@ if (Meteor.isServer) {
// counter.
// We need to run this code on the server only, otherwise the incrementation
// will be done twice.
Users.after.update(function(userId, user, fieldNames) {
Users.after.update(function (userId, user, fieldNames) {
// The `starredBoards` list is hosted on the `profile` field. If this
// field hasn't been modificated we don't need to run this hook.
if (!_.contains(fieldNames, 'profile'))
@ -464,7 +464,7 @@ if (Meteor.isServer) {
// direction and then in the other.
function incrementBoards(boardsIds, inc) {
boardsIds.forEach((boardId) => {
Boards.update(boardId, {$inc: {stars: inc}});
Boards.update(boardId, { $inc: { stars: inc } });
});
}
incrementBoards(_.difference(oldIds, newIds), -1);
@ -505,10 +505,10 @@ if (Meteor.isServer) {
//invite user to corresponding boards
const disableRegistration = Settings.findOne().disableRegistration;
if (disableRegistration) {
const invitationCode = InvitationCodes.findOne({code: doc.profile.icode, valid:true});
const invitationCode = InvitationCodes.findOne({ code: doc.profile.icode, valid: true });
if (!invitationCode) {
throw new Meteor.Error('error-invitation-code-not-exist');
}else{
} else {
invitationCode.boardsToBeInvited.forEach((boardId) => {
const board = Boards.findOne(boardId);
board.addMember(doc._id);
@ -517,9 +517,55 @@ if (Meteor.isServer) {
doc.profile = {};
}
doc.profile.invitedBoards = invitationCode.boardsToBeInvited;
Users.update(doc._id, {$set:{profile: doc.profile}});
InvitationCodes.update(invitationCode._id, {$set: {valid:false}});
Users.update(doc._id, { $set: { profile: doc.profile } });
InvitationCodes.update(invitationCode._id, { $set: { valid: false } });
}
}
});
}
// USERS REST API
if (Meteor.isServer) {
JsonRoutes.add('GET', '/api/users', function (req, res, next) {
JsonRoutes.sendResult(res, {
code: 200,
data: Meteor.users.find({}).map(function (doc) {
return { _id: doc._id, username: doc.username };
}),
});
});
JsonRoutes.add('GET', '/api/users/:id', function (req, res, next) {
const id = req.params.id;
JsonRoutes.sendResult(res, {
code: 200,
data: Meteor.users.findOne({ _id: id }),
});
});
JsonRoutes.add('POST', '/api/users/', function (req, res, next) {
const id = Accounts.createUser({
username: req.body.username,
email: req.body.email,
password: 'default',
});
JsonRoutes.sendResult(res, {
code: 200,
data: {
_id: id,
},
});
});
JsonRoutes.add('DELETE', '/api/users/:id', function (req, res, next) {
const id = req.params.id;
Meteor.users.remove({ _id: id });
JsonRoutes.sendResult(res, {
code: 200,
data: {
_id: id,
},
});
});
}