rulesHelper.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. RulesHelper = {
  2. executeRules(activity){
  3. const matchingRules = this.findMatchingRules(activity);
  4. console.log(matchingRules);
  5. for(let i = 0;i< matchingRules.length;i++){
  6. console.log(matchingRules[i]);
  7. const actionType = matchingRules[i].getAction().actionType;
  8. this.performAction(activity,actionType);
  9. }
  10. },
  11. performAction(activity,actionType){
  12. if(actionType == "moveCardToTop"){
  13. const card = Cards.findOne({_id:activity.cardId});
  14. const minOrder = _.min(card.list().cards(card.swimlaneId).map((c) => c.sort));
  15. card.move(card.swimlaneId, card.listId, minOrder - 1);
  16. }
  17. },
  18. findMatchingRules(activity){
  19. const activityType = activity.activityType;
  20. if(TriggersDef[activityType] == undefined){
  21. return [];
  22. }
  23. const matchingFields = TriggersDef[activityType].matchingFields;
  24. const matchingMap = this.buildMatchingFieldsMap(activity,matchingFields);
  25. let matchingTriggers = Triggers.find(matchingMap);
  26. let matchingRules = [];
  27. matchingTriggers.forEach(function(trigger){
  28. matchingRules.push(trigger.getRule());
  29. });
  30. return matchingRules;
  31. },
  32. buildMatchingFieldsMap(activity, matchingFields){
  33. let matchingMap = {"activityType":activity.activityType};
  34. for(let i = 0;i< matchingFields.length;i++){
  35. // Creating a matching map with the actual field of the activity
  36. // and with the wildcard (for example: trigger when a card is added
  37. // in any [*] board
  38. matchingMap[matchingFields[i]] = { $in: [activity[matchingFields[i]],"*"]};
  39. }
  40. return matchingMap;
  41. }
  42. }