浏览代码

Merge pull request #4911 from DimDz/master

Add @operation new_checklist_item
Lauri Ojansivu 2 年之前
父节点
当前提交
a921bde6ac
共有 2 个文件被更改,包括 105 次插入0 次删除
  1. 60 0
      models/cards.js
  2. 45 0
      models/checklists.js

+ 60 - 0
models/cards.js

@@ -3924,6 +3924,66 @@ JsonRoutes.add('GET', '/api/boards/:boardId/cards_count', function(
       });
     },
   );
+
+  /**
+  * @operation edit_card_custom_field
+  * @summary Edit Custom Field in a Card
+  *
+  * @description Edit a custom field value in a card
+  * @param {string} boardId the board ID of the card
+  * @param {string} listId the list ID of the card
+  * @param {string} cardId the ID of the card
+  * @param {string} customFieldId the ID of the custom field
+  * @param {string} value the new custom field value
+  * @return_type {_id: string, customFields: object}
+  */
+  JsonRoutes.add(
+    'POST',
+    '/api/boards/:boardId/lists/:listId/cards/:cardId/customFields/:customFieldId',
+    function(req, res) {
+      const paramBoardId = req.params.boardId;
+      const paramCardId = req.params.cardId;
+      const paramListId = req.params.listId;
+      const paramCustomFieldId = req.params.customFieldId;
+      const paramCustomFieldValue = req.body.value;
+      Authentication.checkBoardAccess(req.userId, paramBoardId);
+      const card = Cards.findOne({
+        _id: paramCardId,
+        listId: paramListId,
+        boardId: paramBoardId,
+        archived: false,
+      });
+      if (!card) {
+        throw new Meteor.Error(404, 'Card not found');
+      }
+      const customFields = card.customFields || [];
+      const updatedCustomFields = customFields.map(cf => {
+        if (cf._id === paramCustomFieldId) {
+          return {
+            _id: cf._id,
+            value: paramCustomFieldValue,
+          };
+        }
+        return cf;
+      });
+      Cards.direct.update(
+        {
+          _id: paramCardId,
+          listId: paramListId,
+          boardId: paramBoardId,
+          archived: false,
+        },
+        { $set: { customFields: updatedCustomFields } },
+      );
+      JsonRoutes.sendResult(res, {
+        code: 200,
+        data: {
+          _id: paramCardId,
+          customFields: updatedCustomFields,
+        },
+      });
+    },
+  );
 }
 
 export default Cards;

+ 45 - 0
models/checklists.js

@@ -383,6 +383,51 @@ if (Meteor.isServer) {
     },
   );
 
+  /**
+  * @operation new_checklist_item
+  * @summary add a new item to a checklist
+  *
+  * @param {string} boardId the board ID
+  * @param {string} cardId the card ID
+  * @param {string} checklistId the ID of the checklist
+  * @param {string} title the title of the new item
+  * @return_type {_id: string}
+  */
+
+  JsonRoutes.add(
+    'POST',
+    '/api/boards/:boardId/cards/:cardId/checklists/:checklistId/items',
+    function(req, res) {
+      const paramBoardId = req.params.boardId;
+      const paramChecklistId = req.params.checklistId;
+      const paramCardId = req.params.cardId;
+      Authentication.checkBoardAccess(req.userId, paramBoardId);
+      const checklist = Checklists.findOne({
+        _id: paramChecklistId,
+        cardId: paramCardId,
+      });
+      if (checklist) {
+        const id = ChecklistItems.insert({
+          cardId: paramCardId,
+          checklistId: paramChecklistId,
+          title: req.body.title,
+          isFinished: false,
+          sort: 0,
+        });
+        JsonRoutes.sendResult(res, {
+          code: 200,
+          data: {
+            _id: id,
+          },
+        });
+      } else {
+        JsonRoutes.sendResult(res, {
+          code: 404,
+        });
+      }
+    },
+  );
+
   /**
    * @operation delete_checklist
    * @summary Delete a checklist