From bf7de463f1f71f1758b62187667bf3a7e55585ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Manelli?= Date: Mon, 19 Mar 2018 00:25:19 -0300 Subject: Add checklist items model, migration and publication --- models/checklistItems.js | 85 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 models/checklistItems.js (limited to 'models/checklistItems.js') diff --git a/models/checklistItems.js b/models/checklistItems.js new file mode 100644 index 00000000..47e37c87 --- /dev/null +++ b/models/checklistItems.js @@ -0,0 +1,85 @@ +ChecklistItems = new Mongo.Collection('checklistItems'); + +ChecklistItems.attachSchema(new SimpleSchema({ + title: { + type: String, + }, + sort: { + type: Number, + decimal: true, + }, + isFinished: { + type: Boolean, + defaultValue: false, + }, + checklistId: { + type: String, + }, + cardId: { + type: String, + }, +})); + +ChecklistItems.allow({ + insert(userId, doc) { + return allowIsBoardMemberByCard(userId, Cards.findOne(doc.cardId)); + }, + update(userId, doc) { + return allowIsBoardMemberByCard(userId, Cards.findOne(doc.cardId)); + }, + remove(userId, doc) { + return allowIsBoardMemberByCard(userId, Cards.findOne(doc.cardId)); + }, + fetch: ['userId', 'cardId'], +}); + +ChecklistItems.before.insert((userId, doc) => { + if (!doc.userId) { + doc.userId = userId; + } +}); + +// Mutations +ChecklistItems.mutations({ + setTitle(title) { + return { $set: { title } }; + }, + toggleItem() { + return { $set: { isFinished: !this.isFinished } }; + }, +}); + +// Activities helper +function itemCreation(userId, doc) { + const card = Cards.findOne(doc.cardId); + const boardId = card.boardId; + Activities.insert({ + userId, + activityType: 'addChecklistItem', + cardId: doc.cardId, + boardId, + checklistId: doc.checklistId, + checklistItemId: doc._id, + }); +} + +function itemRemover(userId, doc) { + Activities.remove({ + checklistItemId: doc._id, + }); +} + +// Activities +if (Meteor.isServer) { + Meteor.startup(() => { + ChecklistItems._collection._ensureIndex({ checklistId: 1 }); + }); + + ChecklistItems.after.insert((userId, doc) => { + itemCreation(userId, doc); + }); + + ChecklistItems.after.remove((userId, doc) => { + itemRemover(userId, doc); + }); +} -- cgit v1.2.3-1-g7c22 From 153960742cac53c52f176f1bc645d850f25ac966 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Manelli?= Date: Mon, 19 Mar 2018 15:03:44 -0300 Subject: Fix migration. Replace old checklist-item sort algorithm. --- models/checklistItems.js | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'models/checklistItems.js') diff --git a/models/checklistItems.js b/models/checklistItems.js index 47e37c87..19b3799d 100644 --- a/models/checklistItems.js +++ b/models/checklistItems.js @@ -47,6 +47,16 @@ ChecklistItems.mutations({ toggleItem() { return { $set: { isFinished: !this.isFinished } }; }, + move(checklistId, sortIndex) { + const cardId = Checklists.findOne(checklistId).cardId; + const mutatedFields = { + cardId, + checklistId, + sort: sortIndex, + }; + + return {$set: mutatedFields}; + } }); // Activities helper -- cgit v1.2.3-1-g7c22 From 3eb6f97291e9160403a3f2a6b1de34c20f434ecb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Manelli?= Date: Mon, 19 Mar 2018 17:31:53 -0300 Subject: Fix lint errors --- models/checklistItems.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'models/checklistItems.js') diff --git a/models/checklistItems.js b/models/checklistItems.js index 19b3799d..3c01d476 100644 --- a/models/checklistItems.js +++ b/models/checklistItems.js @@ -56,7 +56,7 @@ ChecklistItems.mutations({ }; return {$set: mutatedFields}; - } + }, }); // Activities helper -- cgit v1.2.3-1-g7c22