You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

43 lines
1.0 KiB

import { Rule } from '@ghostfolio/api/models/rule';
import { getRuleSettings } from '@ghostfolio/api/models/rules/rule-settings';
import {
PortfolioReportRule,
RuleSettings,
UserSettings
} from '@ghostfolio/common/interfaces';
import { Injectable } from '@nestjs/common';
@Injectable()
export class RulesService {
public async evaluate<T extends RuleSettings>(
aRules: Rule<T>[],
aUserSettings: UserSettings
): Promise<PortfolioReportRule[]> {
return aRules.map((rule) => {
const settings = getRuleSettings<T>({
key: rule.getKey(),
userSettings: aUserSettings
});
if (settings.isActive) {
const { evaluation, value } = rule.evaluate(settings);
return {
evaluation,
value,
configuration: rule.getConfiguration(),
isActive: true,
key: rule.getKey(),
name: rule.getName()
};
} else {
return {
isActive: false,
key: rule.getKey(),
name: rule.getName()
};
}
});
}
}