mirror of
https://github.com/wekan/wekan.git
synced 2026-01-03 16:18:49 +01:00
REST API - Meteor 1.4 - first step issue
This commit is contained in:
parent
a99218e2c7
commit
0319bcf7bb
9 changed files with 361 additions and 137 deletions
104
models/users.js
104
models/users.js
|
|
@ -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,
|
||||
},
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue