From d9c0825d5ff8cf3c6985545640148ce1c0f4262b Mon Sep 17 00:00:00 2001 From: huneau romain Date: Wed, 10 May 2017 15:59:06 +0200 Subject: add rest api for checklist and card comment --- models/cardComments.js | 58 ++++++++++++++++++++++++++++++ models/checklists.js | 96 ++++++++++++++++++++++++++++++++++++++++++-------- 2 files changed, 139 insertions(+), 15 deletions(-) (limited to 'models') diff --git a/models/cardComments.js b/models/cardComments.js index 070c148e..64af4433 100644 --- a/models/cardComments.js +++ b/models/cardComments.js @@ -80,3 +80,61 @@ if (Meteor.isServer) { } }); } + +//CARD COMMENT REST API +if (Meteor.isServer) { + JsonRoutes.add('GET', '/api/boards/:boardId/cards/:cardId/comments', function (req, res, next) { + const paramBoardId = req.params.boardId; + const paramCardId = req.params.cardId; + JsonRoutes.sendResult(res, { + code: 200, + data: CardComments.find({ boardId: paramBoardId, cardId: paramCardId}).map(function (doc) { + return { + _id: doc._id, + comment: doc.text, + authorId: doc.userId, + }; + }), + }); + }); + + JsonRoutes.add('GET', '/api/boards/:boardId/cards/:cardId/comments/:commentId', function (req, res, next) { + const paramBoardId = req.params.boardId; + const paramCommentId = req.params.commentId; + const paramCardId = req.params.cardId; + JsonRoutes.sendResult(res, { + code: 200, + data: CardComments.findOne({ _id: paramCommentId, cardId: paramCardId, boardId: paramBoardId }), + }); + }); + + JsonRoutes.add('POST', '/api/boards/:boardId/cards/:cardId/comments', function (req, res, next) { + const paramBoardId = req.params.boardId; + const paramCardId = req.params.cardId; + const id = CardComments.insert({ + userId: req.body.authorId, + text: req.body.comment, + cardId: paramCardId, + boardId: paramBoardId, + }); + JsonRoutes.sendResult(res, { + code: 200, + data: { + _id: id, + }, + }); + }); + + JsonRoutes.add('DELETE', '/api/boards/:boardId/cards/:cardId/comments/:commentId', function (req, res, next) { + const paramBoardId = req.params.boardId; + const paramCommentId = req.params.commentId; + const paramCardId = req.params.cardId; + CardComments.remove({ _id: paramCommentId, cardId: paramCardId, boardId: paramBoardId }); + JsonRoutes.sendResult(res, { + code: 200, + data: { + _id: paramCardId, + }, + }); + }); +} diff --git a/models/checklists.js b/models/checklists.js index 3425f230..4bb580c3 100644 --- a/models/checklists.js +++ b/models/checklists.js @@ -28,22 +28,29 @@ Checklists.attachSchema(new SimpleSchema({ createdAt: { type: Date, denyUpdate: false, + autoValue() { // eslint-disable-line consistent-return + if (this.isInsert) { + return new Date(); + } else { + this.unset(); + } + }, }, })); Checklists.helpers({ - itemCount () { + itemCount() { return this.items.length; }, - finishedCount () { + finishedCount() { return this.items.filter((item) => { return item.isFinished; }).length; }, - isFinished () { + isFinished() { return 0 !== this.itemCount() && this.itemCount() === this.finishedCount(); }, - getItem (_id) { + getItem(_id) { return _.findWhere(this.items, { _id }); }, itemIndex(itemId) { @@ -73,17 +80,17 @@ Checklists.before.insert((userId, doc) => { Checklists.mutations({ //for checklist itself - setTitle(title){ - return { $set: { title }}; + setTitle(title) { + return { $set: { title } }; }, //for items in checklist addItem(title) { const itemCount = this.itemCount(); const _id = `${this._id}${itemCount}`; - return { $addToSet: {items: {_id, title, isFinished: false}} }; + return { $addToSet: { items: { _id, title, isFinished: false } } }; }, removeItem(itemId) { - return {$pull: {items: {_id : itemId}}}; + return { $pull: { items: { _id: itemId } } }; }, editItem(itemId, title) { if (this.getItem(itemId)) { @@ -150,13 +157,13 @@ if (Meteor.isServer) { //TODO: so there will be no activity for adding item into checklist, maybe will be implemented in the future. // Checklists.after.update((userId, doc) => { // console.log('update:', doc) - // Activities.insert({ - // userId, - // activityType: 'addChecklist', - // boardId: doc.boardId, - // cardId: doc.cardId, - // checklistId: doc._id, - // }); + // Activities.insert({ + // userId, + // activityType: 'addChecklist', + // boardId: doc.boardId, + // cardId: doc.cardId, + // checklistId: doc._id, + // }); // }); Checklists.before.remove((userId, doc) => { @@ -166,3 +173,62 @@ if (Meteor.isServer) { } }); } + +//CARD COMMENT REST API +if (Meteor.isServer) { + JsonRoutes.add('GET', '/api/boards/:boardId/cards/:cardId/checklists', function (req, res, next) { + const paramCardId = req.params.cardId; + JsonRoutes.sendResult(res, { + code: 200, + data: Checklists.find({ cardId: paramCardId }).map(function (doc) { + return { + _id: doc._id, + title: doc.title, + }; + }), + }); + }); + + JsonRoutes.add('GET', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId', function (req, res, next) { + const paramChecklistId = req.params.checklistId; + const paramCardId = req.params.cardId; + JsonRoutes.sendResult(res, { + code: 200, + data: Checklists.findOne({ _id: paramChecklistId, cardId: paramCardId }), + }); + }); + + JsonRoutes.add('POST', '/api/boards/:boardId/cards/:cardId/checklists', function (req, res, next) { + const paramCardId = req.params.cardId; + + const checklistToSend = {}; + checklistToSend.cardId = paramCardId; + checklistToSend.title = req.body.title; + checklistToSend.items = []; + const id = Checklists.insert(checklistToSend); + const checklist = Checklists.findOne({_id: id}); + req.body.items.forEach(function (item) { + checklist.addItem(item); + }, this); + + + JsonRoutes.sendResult(res, { + code: 200, + data: { + _id: id, + }, + }); + }); + + JsonRoutes.add('DELETE', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId', function (req, res, next) { + const paramCommentId = req.params.commentId; + const paramCardId = req.params.cardId; + Checklists.remove({ _id: paramCommentId, cardId: paramCardId }); + JsonRoutes.sendResult(res, { + code: 200, + data: { + _id: paramCardId, + }, + }); + }); +} -- cgit v1.2.3-1-g7c22