summaryrefslogtreecommitdiffstats
path: root/server/rulesHelper.js
blob: 4c2a1ef1ebe7aa612537edb410722bf30dc1a62a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
RulesHelper = {


	executeRules(activity){
		const matchingRules = this.findMatchingRules(activity);
		console.log(matchingRules);
		for(let i = 0;i< matchingRules.length;i++){
			console.log(matchingRules[i]);
			const actionType = matchingRules[i].getAction().actionType;
			this.performAction(activity,actionType);
		}
	},

	performAction(activity,actionType){
		if(actionType == "moveCardToTop"){
			const card = Cards.findOne({_id:activity.cardId});
		    const minOrder = _.min(card.list().cards(card.swimlaneId).map((c) => c.sort));
		    card.move(card.swimlaneId, card.listId, minOrder - 1);
		}
	},
	findMatchingRules(activity){
		const activityType = activity.activityType;
		if(TriggersDef[activityType] == undefined){
			return [];
		}
		const matchingFields = TriggersDef[activityType].matchingFields;
		const matchingMap = this.buildMatchingFieldsMap(activity,matchingFields);
		let matchingTriggers = Triggers.find(matchingMap);
		let matchingRules = [];
		matchingTriggers.forEach(function(trigger){
			matchingRules.push(trigger.getRule());
		});
		return matchingRules;
	},
	buildMatchingFieldsMap(activity, matchingFields){
		let matchingMap = {};
		for(let i = 0;i< matchingFields.length;i++){
			// Creating a matching map with the actual field of the activity
			// and with the wildcard (for example: trigger when a card is added
			// in any [*] board
			matchingMap[matchingFields[i]] = { $in: [activity[matchingFields[i]],"*"]};
		}
		return matchingMap;
	}

}