2
0
Эх сурвалжийг харах

add cardNumber handling to card and board model

Kai Lehmann 3 жил өмнө
parent
commit
b57eae14d4
3 өөрчлөгдсөн 72 нэмэгдсэн , 0 устгасан
  1. 22 0
      models/boards.js
  2. 17 0
      models/cards.js
  3. 33 0
      server/migrations.js

+ 22 - 0
models/boards.js

@@ -375,6 +375,14 @@ Boards.attachSchema(
       defaultValue: true,
     },
 
+    allowsCardNumber: {
+      /**
+       * Does the board allows card numbers?
+       */
+      type: Boolean,
+      defaultValue: false,
+    },
+
     allowsActivities: {
       /**
        * Does the board allows comments?
@@ -1056,6 +1064,16 @@ Boards.helpers({
     return result;
   },
 
+  getNextCardNumber() {
+    const boardCards = Cards.find({ boardId: this._id }).fetch();
+    if (boardCards.length == 0) {
+      return 1;
+    }
+    const maxCardNumber = Math.max(...boardCards
+      .map(c => c.cardNumber ? c.cardNumber : 0));
+    return maxCardNumber + 1;
+  },
+
   cardsDueInBetween(start, end) {
     return Cards.find({
       boardId: this._id,
@@ -1285,6 +1303,10 @@ Boards.mutations({
     return { $set: { allowsDescriptionTitle } };
   },
 
+  setAllowsCardNumber(allowsCardNumber) {
+    return { $set: { allowsCardNumber } };
+  },
+
   setAllowsDescriptionText(allowsDescriptionText) {
     return { $set: { allowsDescriptionText } };
   },

+ 17 - 0
models/cards.js

@@ -470,6 +470,16 @@ Cards.attachSchema(
       optional: true,
       defaultValue: [],
     },
+    cardNumber: {
+      /**
+       * A boardwise sequentially increasing number that is assigned
+       * to every newly created card
+       */
+      type: Number,
+      decimal: true,
+      optional: true,
+      defaultValue: 0,
+    },
   }),
 );
 
@@ -1647,6 +1657,10 @@ Cards.helpers({
     }
   },
 
+  getCardNumber() {
+    return this.cardNumber;
+  },
+
   getBoardTitle() {
     if (this.isLinkedCard()) {
       const card = Cards.findOne({ _id: this.linkedId });
@@ -3207,6 +3221,8 @@ if (Meteor.isServer) {
     Authentication.checkAdminOrCondition(req.userId, addPermission);
     const paramListId = req.params.listId;
     const paramParentId = req.params.parentId;
+
+    const nextCardNumber = board.getNextCardNumber();
     const currentCards = Cards.find(
       {
         listId: paramListId,
@@ -3229,6 +3245,7 @@ if (Meteor.isServer) {
         userId: req.body.authorId,
         swimlaneId: req.body.swimlaneId,
         sort: currentCards.count(),
+        cardNumber: nextCardNumber,
         members,
         assignees,
       });

+ 33 - 0
server/migrations.js

@@ -1061,3 +1061,36 @@ Migrations.add('add-hide-logo-by-default', () => {
     noValidateMulti,
   );
 });
+
+Migrations.add('add-card-number-allowed', () => {
+  Boards.update(
+    {
+      allowsCardNumber: {
+        $exists: false,
+      },
+    },
+    {
+      $set: {
+        allowsCardNumber: false,
+      },
+    },
+    noValidateMulti,
+  );
+});
+
+Migrations.add('assign-boardwise-card-numbers', () => {
+  Boards.find().forEach(board => {
+    let nextCardNumber = 1;
+    Cards.find(
+      {
+        boardId: board._id,
+        cardNumber: {
+          $exists: false
+        }
+      }
+    ).forEach(card => {
+      Cards.update(card._id, { $set: { cardNumber } }, noValidate);
+      nextCardNumber++;
+    });
+  })
+});