mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 15:30:13 +01:00
Replace reywood:publish-composite by cottz:publish-relations
Since bug #431 is due to publish-composite I tried to fix this package and propose a pull request but the code was difficult to refactor. I decided to use @cottz package instead which handled DDP messages in the correct order. Fixes #431
This commit is contained in:
parent
0954cff5b4
commit
677e9937e0
3 changed files with 53 additions and 92 deletions
|
|
@ -18,13 +18,13 @@ es5-shim
|
|||
aldeed:collection2
|
||||
cfs:gridfs
|
||||
cfs:standard-packages
|
||||
cottz:publish-relations
|
||||
dburles:collection-helpers
|
||||
idmontie:migrations
|
||||
matb33:collection-hooks
|
||||
matteodem:easy-search
|
||||
mongo
|
||||
mquandalle:collection-mutations
|
||||
reywood:publish-composite
|
||||
|
||||
# Account system
|
||||
accounts-password
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ check@1.1.0
|
|||
chuangbo:cookie@1.1.0
|
||||
coffeescript@1.0.11
|
||||
cosmos:browserify@0.9.2
|
||||
cottz:publish-relations@2.0.0
|
||||
dburles:collection-helpers@1.0.4
|
||||
ddp@1.2.2
|
||||
ddp-client@1.2.1
|
||||
|
|
@ -119,7 +120,6 @@ reactive-dict@1.1.3
|
|||
reactive-var@1.0.6
|
||||
reload@1.1.4
|
||||
retry@1.0.4
|
||||
reywood:publish-composite@1.4.2
|
||||
routepolicy@1.0.6
|
||||
seriousm:emoji-continued@1.4.0
|
||||
service-configuration@1.0.5
|
||||
|
|
|
|||
|
|
@ -55,97 +55,58 @@ Meteor.publish('archivedBoards', function() {
|
|||
});
|
||||
});
|
||||
|
||||
Meteor.publishComposite('board', function(boardId) {
|
||||
Meteor.publishRelations('board', function(boardId) {
|
||||
check(boardId, String);
|
||||
return {
|
||||
find() {
|
||||
return Boards.find({
|
||||
_id: boardId,
|
||||
archived: false,
|
||||
// If the board is not public the user has to be a member of it to see
|
||||
// it.
|
||||
$or: [
|
||||
{ permission: 'public' },
|
||||
{ members: { $elemMatch: { userId: this.userId, isActive: true }}},
|
||||
],
|
||||
}, { limit: 1 });
|
||||
},
|
||||
children: [
|
||||
// Lists
|
||||
{
|
||||
find(board) {
|
||||
return Lists.find({
|
||||
boardId: board._id,
|
||||
});
|
||||
},
|
||||
},
|
||||
|
||||
// Cards and cards comments
|
||||
// XXX Originally we were publishing the card documents as a child of the
|
||||
// list publication defined above using the following selector `{ listId:
|
||||
// list._id }`. But it was causing a race condition in publish-composite,
|
||||
// that I documented here:
|
||||
//
|
||||
// https://github.com/englue/meteor-publish-composite/issues/29
|
||||
//
|
||||
// I then tried to replace publish-composite by cottz:publish, but it had
|
||||
// a similar problem:
|
||||
//
|
||||
// https://github.com/Goluis/cottz-publish/issues/4
|
||||
// https://github.com/wekan/wekan/pull/78
|
||||
//
|
||||
// The current state of relational publishing in meteor is a bit sad,
|
||||
// there are a lot of various packages, with various APIs, some of them
|
||||
// are unmaintained. Fortunately this is something that will be fixed by
|
||||
// meteor-core at some point:
|
||||
//
|
||||
// https://trello.com/c/BGvIwkEa/48-easy-joins-in-subscriptions
|
||||
//
|
||||
// And in the meantime our code below works pretty well -- it's not even a
|
||||
// hack!
|
||||
{
|
||||
find(board) {
|
||||
return Cards.find({
|
||||
boardId: board._id,
|
||||
});
|
||||
},
|
||||
|
||||
children: [
|
||||
// comments
|
||||
{
|
||||
find(card) {
|
||||
return CardComments.find({
|
||||
cardId: card._id,
|
||||
});
|
||||
},
|
||||
},
|
||||
// Attachments
|
||||
{
|
||||
find(card) {
|
||||
return Attachments.find({
|
||||
cardId: card._id,
|
||||
});
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
// Board members. This publication also includes former board members that
|
||||
// aren't members anymore but may have some activities attached to them in
|
||||
// the history.
|
||||
{
|
||||
find(board) {
|
||||
return Users.find({
|
||||
_id: { $in: _.pluck(board.members, 'userId') },
|
||||
});
|
||||
},
|
||||
// Presence indicators
|
||||
children: [{
|
||||
find(user) {
|
||||
return presences.find({userId: user._id});
|
||||
},
|
||||
}],
|
||||
},
|
||||
this.cursor(Boards.find({
|
||||
_id: boardId,
|
||||
archived: false,
|
||||
// If the board is not public the user has to be a member of it to see
|
||||
// it.
|
||||
$or: [
|
||||
{ permission: 'public' },
|
||||
{ members: { $elemMatch: { userId: this.userId, isActive: true }}},
|
||||
],
|
||||
};
|
||||
}, { limit: 1 }), function(boardId, board) {
|
||||
this.cursor(Lists.find({ boardId }));
|
||||
|
||||
// Cards and cards comments
|
||||
// XXX Originally we were publishing the card documents as a child of the
|
||||
// list publication defined above using the following selector `{ listId:
|
||||
// list._id }`. But it was causing a race condition in publish-composite,
|
||||
// that I documented here:
|
||||
//
|
||||
// https://github.com/englue/meteor-publish-composite/issues/29
|
||||
//
|
||||
// cottz:publish had a similar problem:
|
||||
//
|
||||
// https://github.com/Goluis/cottz-publish/issues/4
|
||||
//
|
||||
// The current state of relational publishing in meteor is a bit sad,
|
||||
// there are a lot of various packages, with various APIs, some of them
|
||||
// are unmaintained. Fortunately this is something that will be fixed by
|
||||
// meteor-core at some point:
|
||||
//
|
||||
// https://trello.com/c/BGvIwkEa/48-easy-joins-in-subscriptions
|
||||
//
|
||||
// And in the meantime our code below works pretty well -- it's not even a
|
||||
// hack!
|
||||
this.cursor(Cards.find({ boardId }), function(cardId) {
|
||||
this.cursor(CardComments.find({ cardId }));
|
||||
this.cursor(Attachments.find({ cardId }));
|
||||
});
|
||||
|
||||
// Board members. This publication also includes former board members that
|
||||
// aren't members anymore but may have some activities attached to them in
|
||||
// the history.
|
||||
//
|
||||
this.cursor(Users.find({
|
||||
_id: { $in: _.pluck(board.members, 'userId') },
|
||||
}), function(userId) {
|
||||
// Presence indicators
|
||||
this.cursor(presences.find({ userId }));
|
||||
});
|
||||
});
|
||||
|
||||
return this.ready();
|
||||
});
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue