Thomas Kaul
					
					1 year ago
					
						
							committed by
							
								
								GitHub
							
						 
					
				 
				
			 
		 
		
			
				
					
					No known key found for this signature in database
					
						
							GPG Key ID: B5690EEEBB952194
						
					
				
			
		
		
		
	
		
			
				 2 changed files with 
18 additions and 
7 deletions
			 
			
		 
		
			
				- 
					
					
					 
					apps/api/src/app/portfolio/rules.service.ts
				
 
			
				- 
					
					
					 
					libs/common/src/lib/interfaces/portfolio-report-rule.interface.ts
				
 
			
		
		
			
			
			
			
			
			
				
				
					
						
							
								
									
	
		
			
				
					| 
						
						
						
					 | 
				
				 | 
				
					@ -1,6 +1,9 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { RuleSettings } from '@ghostfolio/api/models/interfaces/rule-settings.interface'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { Rule } from '@ghostfolio/api/models/rule'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { UserSettings } from '@ghostfolio/common/interfaces'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  PortfolioReportRule, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  UserSettings | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} from '@ghostfolio/common/interfaces'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					import { Injectable } from '@nestjs/common'; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
				
				 | 
				
					@ -11,19 +14,23 @@ export class RulesService { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  public async evaluate<T extends RuleSettings>( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    aRules: Rule<T>[], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    aUserSettings: UserSettings | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  ) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  ): Promise<PortfolioReportRule[]> { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    return aRules.map((rule) => { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if (rule.getSettings(aUserSettings)?.isActive) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        const { evaluation, value } = rule.evaluate( | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          rule.getSettings(aUserSettings) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        ); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      const settings = rule.getSettings(aUserSettings); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      if (settings?.isActive) { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        const { evaluation, value } = rule.evaluate(settings); | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					
 | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          evaluation, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          value, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          isActive: true, | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          key: rule.getKey(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          name: rule.getName() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          name: rule.getName(), | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          settings: <PortfolioReportRule['settings']>{ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            thresholdMax: settings['thresholdMax'], | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            thresholdMin: settings['thresholdMin'] | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					          } | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					      } else { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        return { | 
				
			
			
		
	
	
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
				
				 | 
				
					
  | 
				
			
			
		
	
								
							
						
					 
					
				 
			 
		
			
			
			
			
			
			
				
				
					
						
							
								
									
	
		
			
				
					| 
						
						
							
								
							
						
						
					 | 
				
				 | 
				
					@ -3,5 +3,9 @@ export interface PortfolioReportRule { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  isActive: boolean; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  key: string; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  name: string; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  settings?: { | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    thresholdMax?: number; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    thresholdMin?: number; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  }; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					  value?: boolean; | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					} | 
				
			
			
		
	
	
		
			
				
					| 
						
						
						
					 | 
				
				 | 
				
					
  |