2021-04-13 21:53:58 +02:00
|
|
|
import { Injectable } from '@nestjs/common';
|
|
|
|
import { Rule } from '../models/rule';
|
2021-07-31 23:02:37 +02:00
|
|
|
import { Currency } from '@prisma/client';
|
|
|
|
import { RuleSettings } from '@ghostfolio/api/models/interfaces/rule-settings.interface';
|
2021-04-13 21:53:58 +02:00
|
|
|
|
|
|
|
@Injectable()
|
|
|
|
export class RulesService {
|
|
|
|
public constructor() {}
|
|
|
|
|
2021-07-31 23:02:37 +02:00
|
|
|
public async evaluate<T extends RuleSettings>(
|
|
|
|
aRules: Rule<T>[],
|
|
|
|
aUserSettings: { baseCurrency: Currency }
|
2021-04-13 21:53:58 +02:00
|
|
|
) {
|
|
|
|
return aRules
|
|
|
|
.filter((rule) => {
|
2021-07-31 23:02:37 +02:00
|
|
|
return rule.getSettings(aUserSettings)?.isActive;
|
2021-04-13 21:53:58 +02:00
|
|
|
})
|
|
|
|
.map((rule) => {
|
2021-07-31 23:19:57 +02:00
|
|
|
const evaluationResult = rule.evaluate(rule.getSettings(aUserSettings));
|
2021-04-13 21:53:58 +02:00
|
|
|
return { ...evaluationResult, name: rule.getName() };
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|