diff options
Diffstat (limited to 'models/checklists.js')
-rw-r--r-- | models/checklists.js | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/models/checklists.js b/models/checklists.js index c58453ef..33cb0f40 100644 --- a/models/checklists.js +++ b/models/checklists.js @@ -1,18 +1,33 @@ Checklists = new Mongo.Collection('checklists'); +/** + * A Checklist + */ Checklists.attachSchema(new SimpleSchema({ cardId: { + /** + * The ID of the card the checklist is in + */ type: String, }, title: { + /** + * the title of the checklist + */ type: String, defaultValue: 'Checklist', }, finishedAt: { + /** + * When was the checklist finished + */ type: Date, optional: true, }, createdAt: { + /** + * Creation date of the checklist + */ type: Date, denyUpdate: false, autoValue() { // eslint-disable-line consistent-return @@ -24,12 +39,28 @@ Checklists.attachSchema(new SimpleSchema({ }, }, sort: { + /** + * sorting value of the checklist + */ type: Number, decimal: true, }, })); Checklists.helpers({ + copy(newCardId) { + const oldChecklistId = this._id; + this._id = null; + this.cardId = newCardId; + const newChecklistId = Checklists.insert(this); + ChecklistItems.find({checklistId: oldChecklistId}).forEach((item) => { + item._id = null; + item.checklistId = newChecklistId; + item.cardId = newCardId; + ChecklistItems.insert(item); + }); + }, + itemCount() { return ChecklistItems.find({ checklistId: this._id }).count(); }, @@ -47,6 +78,18 @@ Checklists.helpers({ isFinished() { return 0 !== this.itemCount() && this.itemCount() === this.finishedCount(); }, + checkAllItems(){ + const checkItems = ChecklistItems.find({checklistId: this._id}); + checkItems.forEach(function(item){ + item.check(); + }); + }, + uncheckAllItems(){ + const checkItems = ChecklistItems.find({checklistId: this._id}); + checkItems.forEach(function(item){ + item.uncheck(); + }); + }, itemIndex(itemId) { const items = self.findOne({_id : this._id}).items; return _.pluck(items, '_id').indexOf(itemId); @@ -91,6 +134,9 @@ if (Meteor.isServer) { cardId: doc.cardId, boardId: Cards.findOne(doc.cardId).boardId, checklistId: doc._id, + checklistName:doc.title, + listId: doc.listId, + swimlaneId: doc.swimlaneId, }); }); @@ -101,10 +147,29 @@ if (Meteor.isServer) { Activities.remove(activity._id); }); } + Activities.insert({ + userId, + activityType: 'removeChecklist', + cardId: doc.cardId, + boardId: Cards.findOne(doc.cardId).boardId, + checklistId: doc._id, + checklistName:doc.title, + listId: doc.listId, + swimlaneId: doc.swimlaneId, + }); }); } if (Meteor.isServer) { + /** + * @operation get_all_checklists + * @summary Get the list of checklists attached to a card + * + * @param {string} boardId the board ID + * @param {string} cardId the card ID + * @return_type [{_id: string, + * title: string}] + */ JsonRoutes.add('GET', '/api/boards/:boardId/cards/:cardId/checklists', function (req, res) { Authentication.checkUserId( req.userId); const paramCardId = req.params.cardId; @@ -126,6 +191,22 @@ if (Meteor.isServer) { } }); + /** + * @operation get_checklist + * @summary Get a checklist + * + * @param {string} boardId the board ID + * @param {string} cardId the card ID + * @param {string} checklistId the ID of the checklist + * @return_type {cardId: string, + * title: string, + * finishedAt: string, + * createdAt: string, + * sort: number, + * items: [{_id: string, + * title: string, + * isFinished: boolean}]} + */ JsonRoutes.add('GET', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId', function (req, res) { Authentication.checkUserId( req.userId); const paramChecklistId = req.params.checklistId; @@ -150,6 +231,15 @@ if (Meteor.isServer) { } }); + /** + * @operation new_checklist + * @summary create a new checklist + * + * @param {string} boardId the board ID + * @param {string} cardId the card ID + * @param {string} title the title of the new checklist + * @return_type {_id: string} + */ JsonRoutes.add('POST', '/api/boards/:boardId/cards/:cardId/checklists', function (req, res) { Authentication.checkUserId( req.userId); @@ -181,6 +271,17 @@ if (Meteor.isServer) { } }); + /** + * @operation delete_checklist + * @summary Delete a checklist + * + * @description The checklist will be removed, not put in the recycle bin. + * + * @param {string} boardId the board ID + * @param {string} cardId the card ID + * @param {string} checklistId the ID of the checklist to remove + * @return_type {_id: string} + */ JsonRoutes.add('DELETE', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId', function (req, res) { Authentication.checkUserId( req.userId); const paramChecklistId = req.params.checklistId; |