123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- 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 } };
- },
- check(){
- return { $set: { isFinished: true } };
- },
- uncheck(){
- return { $set: { isFinished: false } };
- },
- 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
- 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,
- checklistItemName:doc.title,
- });
- }
- function itemRemover(userId, doc) {
- const card = Cards.findOne(doc.cardId);
- const boardId = card.boardId;
- Activities.insert({
- userId,
- activityType: 'removedChecklistItem',
- cardId: doc.cardId,
- boardId,
- checklistId: doc.checklistId,
- checklistItemId: doc._id,
- checklistItemName:doc.title,
- });
- Activities.remove({
- checklistItemId: doc._id,
- });
- }
- function publishCheckActivity(userId, doc){
- const card = Cards.findOne(doc.cardId);
- const boardId = card.boardId;
- let activityType;
- if(doc.isFinished){
- activityType = 'checkedItem';
- }else{
- activityType = 'uncheckedItem';
- }
- const act = {
- userId,
- activityType,
- cardId: doc.cardId,
- boardId,
- checklistId: doc.checklistId,
- checklistItemId: doc._id,
- checklistItemName:doc.title,
- };
- Activities.insert(act);
- }
- function publishChekListCompleted(userId, doc, fieldNames, modifier){
- const card = Cards.findOne(doc.cardId);
- const boardId = card.boardId;
- const checklistId = doc.checklistId;
- const checkList = Checklists.findOne({_id:checklistId});
- if(checkList.isFinished()){
- const act = {
- userId,
- activityType: 'checklistCompleted',
- cardId: doc.cardId,
- boardId,
- checklistId: doc.checklistId,
- checklistName:doc.title,
- };
- Activities.insert(act);
- }
- }
- function publishChekListUncompleted(userId, doc, fieldNames, modifier){
- const card = Cards.findOne(doc.cardId);
- const boardId = card.boardId;
- const checklistId = doc.checklistId;
- const checkList = Checklists.findOne({_id:checklistId});
- if(checkList.isFinished()){
- const act = {
- userId,
- activityType: 'checklistUncompleted',
- cardId: doc.cardId,
- boardId,
- checklistId: doc.checklistId,
- checklistName:doc.title,
- };
- Activities.insert(act);
- }
- }
- // Activities
- if (Meteor.isServer) {
- Meteor.startup(() => {
- ChecklistItems._collection._ensureIndex({ checklistId: 1 });
- });
- ChecklistItems.after.update((userId, doc, fieldNames, modifier) => {
- publishCheckActivity(userId, doc);
- publishChekListCompleted(userId, doc, fieldNames, modifier);
- });
- ChecklistItems.before.update((userId, doc, fieldNames, modifier) => {
- publishChekListUncompleted(userId, doc, fieldNames, modifier);
- });
- ChecklistItems.after.insert((userId, doc) => {
- itemCreation(userId, doc);
- });
- ChecklistItems.after.remove((userId, doc) => {
- itemRemover(userId, doc);
- });
- }
- if (Meteor.isServer) {
- JsonRoutes.add('GET', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId/items/:itemId', function (req, res) {
- Authentication.checkUserId( req.userId);
- const paramItemId = req.params.itemId;
- const checklistItem = ChecklistItems.findOne({ _id: paramItemId });
- if (checklistItem) {
- JsonRoutes.sendResult(res, {
- code: 200,
- data: checklistItem,
- });
- } else {
- JsonRoutes.sendResult(res, {
- code: 500,
- });
- }
- });
- JsonRoutes.add('PUT', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId/items/:itemId', function (req, res) {
- Authentication.checkUserId( req.userId);
- const paramItemId = req.params.itemId;
- if (req.body.hasOwnProperty('isFinished')) {
- ChecklistItems.direct.update({_id: paramItemId}, {$set: {isFinished: req.body.isFinished}});
- }
- if (req.body.hasOwnProperty('title')) {
- ChecklistItems.direct.update({_id: paramItemId}, {$set: {title: req.body.title}});
- }
- JsonRoutes.sendResult(res, {
- code: 200,
- data: {
- _id: paramItemId,
- },
- });
- });
- JsonRoutes.add('DELETE', '/api/boards/:boardId/cards/:cardId/checklists/:checklistId/items/:itemId', function (req, res) {
- Authentication.checkUserId( req.userId);
- const paramItemId = req.params.itemId;
- ChecklistItems.direct.remove({ _id: paramItemId });
- JsonRoutes.sendResult(res, {
- code: 200,
- data: {
- _id: paramItemId,
- },
- });
- });
- }
|