ghostfolio/apps/api/src/services/rules.service.ts

31 lines
893 B
TypeScript
Raw Normal View History

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 { PortfolioPosition } from '@ghostfolio/common/interfaces';
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>(
details: { [p: string]: PortfolioPosition },
fees: number,
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) => {
const evaluationResult = rule.evaluate(
details,
2021-07-31 23:02:37 +02:00
fees,
rule.getSettings(aUserSettings)
2021-04-13 21:53:58 +02:00
);
return { ...evaluationResult, name: rule.getName() };
});
}
}