Browse Source

Task/improve type safety in rule models (#7422)

* fix(api): make some env optional

* fix(api): resolve type errors in rules
pull/7426/head
Kenrick Tandrian 5 days ago
committed by GitHub
parent
commit
c197806e6b
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      apps/api/src/models/rule.ts
  2. 14
      apps/api/src/models/rules/account-cluster-risk/current-investment.ts
  3. 6
      apps/api/src/models/rules/account-cluster-risk/single-account.ts
  4. 5
      apps/api/src/models/rules/asset-class-cluster-risk/equity.ts
  5. 5
      apps/api/src/models/rules/asset-class-cluster-risk/fixed-income.ts
  6. 5
      apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts
  7. 5
      apps/api/src/models/rules/currency-cluster-risk/current-investment.ts
  8. 5
      apps/api/src/models/rules/economic-market-cluster-risk/developed-markets.ts
  9. 5
      apps/api/src/models/rules/economic-market-cluster-risk/emerging-markets.ts
  10. 5
      apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts
  11. 5
      apps/api/src/models/rules/fees/fee-ratio-total-investment-volume.ts
  12. 5
      apps/api/src/models/rules/liquidity/buying-power.ts
  13. 5
      apps/api/src/models/rules/regional-market-cluster-risk/asia-pacific.ts
  14. 5
      apps/api/src/models/rules/regional-market-cluster-risk/emerging-markets.ts
  15. 5
      apps/api/src/models/rules/regional-market-cluster-risk/europe.ts
  16. 5
      apps/api/src/models/rules/regional-market-cluster-risk/japan.ts
  17. 5
      apps/api/src/models/rules/regional-market-cluster-risk/north-america.ts
  18. 6
      apps/api/src/services/interfaces/environment.interface.ts

2
apps/api/src/models/rule.ts

@ -59,7 +59,7 @@ export abstract class Rule<T extends RuleSettings> implements RuleInterface<T> {
new Big(currentValue.quantity)
.mul(currentValue.marketPrice ?? 0)
.toNumber(),
currentValue.assetProfile.currency,
currentValue.assetProfile.currency ?? baseCurrency,
baseCurrency
),
0

14
apps/api/src/models/rules/account-cluster-risk/current-investment.ts

@ -1,6 +1,7 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { DEFAULT_CURRENCY, DEFAULT_LOCALE } from '@ghostfolio/common/config';
import {
PortfolioDetails,
RuleSettings,
@ -50,7 +51,7 @@ export class AccountClusterRiskCurrentInvestment extends Rule<Settings> {
};
}
let maxAccount: (typeof accounts)[0];
let maxAccount: (typeof accounts)[0] | undefined;
let totalInvestment = 0;
for (const account of Object.values(accounts)) {
@ -67,7 +68,8 @@ export class AccountClusterRiskCurrentInvestment extends Rule<Settings> {
}
}
const maxInvestmentRatio = maxAccount?.investment / totalInvestment || 0;
const maxInvestmentRatio =
(maxAccount?.investment ?? 0) / totalInvestment || 0;
if (maxInvestmentRatio > ruleSettings.thresholdMax) {
return {
@ -75,7 +77,7 @@ export class AccountClusterRiskCurrentInvestment extends Rule<Settings> {
id: 'rule.accountClusterRiskCurrentInvestment.false',
languageCode: this.getLanguageCode(),
placeholders: {
maxAccountName: maxAccount.name,
maxAccountName: maxAccount?.name ?? '',
maxInvestmentRatio: (maxInvestmentRatio * 100).toPrecision(3),
thresholdMax: ruleSettings.thresholdMax * 100
}
@ -89,7 +91,7 @@ export class AccountClusterRiskCurrentInvestment extends Rule<Settings> {
id: 'rule.accountClusterRiskCurrentInvestment.true',
languageCode: this.getLanguageCode(),
placeholders: {
maxAccountName: maxAccount.name,
maxAccountName: maxAccount?.name ?? '',
maxInvestmentRatio: (maxInvestmentRatio * 100).toPrecision(3),
thresholdMax: ruleSettings.thresholdMax * 100
}
@ -118,8 +120,8 @@ export class AccountClusterRiskCurrentInvestment extends Rule<Settings> {
}
public getSettings({
baseCurrency,
locale,
baseCurrency = DEFAULT_CURRENCY,
locale = DEFAULT_LOCALE,
xRayRules
}: UserSettings): Settings {
return {

6
apps/api/src/models/rules/account-cluster-risk/single-account.ts

@ -1,6 +1,7 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { DEFAULT_LOCALE } from '@ghostfolio/common/config';
import {
PortfolioDetails,
RuleSettings,
@ -68,7 +69,10 @@ export class AccountClusterRiskSingleAccount extends Rule<RuleSettings> {
});
}
public getSettings({ locale, xRayRules }: UserSettings): RuleSettings {
public getSettings({
locale = DEFAULT_LOCALE,
xRayRules
}: UserSettings): RuleSettings {
return {
locale,
isActive: xRayRules?.[this.getKey()]?.isActive ?? true

5
apps/api/src/models/rules/asset-class-cluster-risk/equity.ts

@ -1,6 +1,7 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { DEFAULT_CURRENCY, DEFAULT_LOCALE } from '@ghostfolio/common/config';
import {
PortfolioPosition,
RuleSettings,
@ -107,8 +108,8 @@ export class AssetClassClusterRiskEquity extends Rule<Settings> {
}
public getSettings({
baseCurrency,
locale,
baseCurrency = DEFAULT_CURRENCY,
locale = DEFAULT_LOCALE,
xRayRules
}: UserSettings): Settings {
return {

5
apps/api/src/models/rules/asset-class-cluster-risk/fixed-income.ts

@ -1,6 +1,7 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { DEFAULT_CURRENCY, DEFAULT_LOCALE } from '@ghostfolio/common/config';
import {
PortfolioPosition,
RuleSettings,
@ -107,8 +108,8 @@ export class AssetClassClusterRiskFixedIncome extends Rule<Settings> {
}
public getSettings({
baseCurrency,
locale,
baseCurrency = DEFAULT_CURRENCY,
locale = DEFAULT_LOCALE,
xRayRules
}: UserSettings): Settings {
return {

5
apps/api/src/models/rules/currency-cluster-risk/base-currency-current-investment.ts

@ -1,6 +1,7 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { DEFAULT_CURRENCY, DEFAULT_LOCALE } from '@ghostfolio/common/config';
import {
PortfolioPosition,
RuleSettings,
@ -94,8 +95,8 @@ export class CurrencyClusterRiskBaseCurrencyCurrentInvestment extends Rule<Setti
}
public getSettings({
baseCurrency,
locale,
baseCurrency = DEFAULT_CURRENCY,
locale = DEFAULT_LOCALE,
xRayRules
}: UserSettings): Settings {
return {

5
apps/api/src/models/rules/currency-cluster-risk/current-investment.ts

@ -1,6 +1,7 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { DEFAULT_CURRENCY, DEFAULT_LOCALE } from '@ghostfolio/common/config';
import {
PortfolioPosition,
RuleSettings,
@ -95,8 +96,8 @@ export class CurrencyClusterRiskCurrentInvestment extends Rule<Settings> {
}
public getSettings({
baseCurrency,
locale,
baseCurrency = DEFAULT_CURRENCY,
locale = DEFAULT_LOCALE,
xRayRules
}: UserSettings): Settings {
return {

5
apps/api/src/models/rules/economic-market-cluster-risk/developed-markets.ts

@ -1,6 +1,7 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { DEFAULT_CURRENCY, DEFAULT_LOCALE } from '@ghostfolio/common/config';
import { RuleSettings, UserSettings } from '@ghostfolio/common/interfaces';
export class EconomicMarketClusterRiskDevelopedMarkets extends Rule<Settings> {
@ -97,8 +98,8 @@ export class EconomicMarketClusterRiskDevelopedMarkets extends Rule<Settings> {
}
public getSettings({
baseCurrency,
locale,
baseCurrency = DEFAULT_CURRENCY,
locale = DEFAULT_LOCALE,
xRayRules
}: UserSettings): Settings {
return {

5
apps/api/src/models/rules/economic-market-cluster-risk/emerging-markets.ts

@ -1,6 +1,7 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { DEFAULT_CURRENCY, DEFAULT_LOCALE } from '@ghostfolio/common/config';
import { RuleSettings, UserSettings } from '@ghostfolio/common/interfaces';
export class EconomicMarketClusterRiskEmergingMarkets extends Rule<Settings> {
@ -97,8 +98,8 @@ export class EconomicMarketClusterRiskEmergingMarkets extends Rule<Settings> {
}
public getSettings({
baseCurrency,
locale,
baseCurrency = DEFAULT_CURRENCY,
locale = DEFAULT_LOCALE,
xRayRules
}: UserSettings): Settings {
return {

5
apps/api/src/models/rules/emergency-fund/emergency-fund-setup.ts

@ -1,6 +1,7 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { DEFAULT_CURRENCY, DEFAULT_LOCALE } from '@ghostfolio/common/config';
import { RuleSettings, UserSettings } from '@ghostfolio/common/interfaces';
export class EmergencyFundSetup extends Rule<Settings> {
@ -52,8 +53,8 @@ export class EmergencyFundSetup extends Rule<Settings> {
}
public getSettings({
baseCurrency,
locale,
baseCurrency = DEFAULT_CURRENCY,
locale = DEFAULT_LOCALE,
xRayRules
}: UserSettings): Settings {
return {

5
apps/api/src/models/rules/fees/fee-ratio-total-investment-volume.ts

@ -1,6 +1,7 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { DEFAULT_CURRENCY, DEFAULT_LOCALE } from '@ghostfolio/common/config';
import { RuleSettings, UserSettings } from '@ghostfolio/common/interfaces';
export class FeeRatioTotalInvestmentVolume extends Rule<Settings> {
@ -76,8 +77,8 @@ export class FeeRatioTotalInvestmentVolume extends Rule<Settings> {
}
public getSettings({
baseCurrency,
locale,
baseCurrency = DEFAULT_CURRENCY,
locale = DEFAULT_LOCALE,
xRayRules
}: UserSettings): Settings {
return {

5
apps/api/src/models/rules/liquidity/buying-power.ts

@ -1,6 +1,7 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { DEFAULT_CURRENCY, DEFAULT_LOCALE } from '@ghostfolio/common/config';
import { RuleSettings, UserSettings } from '@ghostfolio/common/interfaces';
export class BuyingPower extends Rule<Settings> {
@ -83,8 +84,8 @@ export class BuyingPower extends Rule<Settings> {
}
public getSettings({
baseCurrency,
locale,
baseCurrency = DEFAULT_CURRENCY,
locale = DEFAULT_LOCALE,
xRayRules
}: UserSettings): Settings {
return {

5
apps/api/src/models/rules/regional-market-cluster-risk/asia-pacific.ts

@ -1,6 +1,7 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { DEFAULT_CURRENCY, DEFAULT_LOCALE } from '@ghostfolio/common/config';
import { UserSettings } from '@ghostfolio/common/interfaces';
import { Settings } from './interfaces/rule-settings.interface';
@ -91,8 +92,8 @@ export class RegionalMarketClusterRiskAsiaPacific extends Rule<Settings> {
}
public getSettings({
baseCurrency,
locale,
baseCurrency = DEFAULT_CURRENCY,
locale = DEFAULT_LOCALE,
xRayRules
}: UserSettings): Settings {
return {

5
apps/api/src/models/rules/regional-market-cluster-risk/emerging-markets.ts

@ -1,6 +1,7 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { DEFAULT_CURRENCY, DEFAULT_LOCALE } from '@ghostfolio/common/config';
import { UserSettings } from '@ghostfolio/common/interfaces';
import { Settings } from './interfaces/rule-settings.interface';
@ -93,8 +94,8 @@ export class RegionalMarketClusterRiskEmergingMarkets extends Rule<Settings> {
}
public getSettings({
baseCurrency,
locale,
baseCurrency = DEFAULT_CURRENCY,
locale = DEFAULT_LOCALE,
xRayRules
}: UserSettings): Settings {
return {

5
apps/api/src/models/rules/regional-market-cluster-risk/europe.ts

@ -1,6 +1,7 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { DEFAULT_CURRENCY, DEFAULT_LOCALE } from '@ghostfolio/common/config';
import { UserSettings } from '@ghostfolio/common/interfaces';
import { Settings } from './interfaces/rule-settings.interface';
@ -91,8 +92,8 @@ export class RegionalMarketClusterRiskEurope extends Rule<Settings> {
}
public getSettings({
baseCurrency,
locale,
baseCurrency = DEFAULT_CURRENCY,
locale = DEFAULT_LOCALE,
xRayRules
}: UserSettings): Settings {
return {

5
apps/api/src/models/rules/regional-market-cluster-risk/japan.ts

@ -1,6 +1,7 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { DEFAULT_CURRENCY, DEFAULT_LOCALE } from '@ghostfolio/common/config';
import { UserSettings } from '@ghostfolio/common/interfaces';
import { Settings } from './interfaces/rule-settings.interface';
@ -91,8 +92,8 @@ export class RegionalMarketClusterRiskJapan extends Rule<Settings> {
}
public getSettings({
baseCurrency,
locale,
baseCurrency = DEFAULT_CURRENCY,
locale = DEFAULT_LOCALE,
xRayRules
}: UserSettings): Settings {
return {

5
apps/api/src/models/rules/regional-market-cluster-risk/north-america.ts

@ -1,6 +1,7 @@
import { Rule } from '@ghostfolio/api/models/rule';
import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service';
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { DEFAULT_CURRENCY, DEFAULT_LOCALE } from '@ghostfolio/common/config';
import { UserSettings } from '@ghostfolio/common/interfaces';
import { Settings } from './interfaces/rule-settings.interface';
@ -91,8 +92,8 @@ export class RegionalMarketClusterRiskNorthAmerica extends Rule<Settings> {
}
public getSettings({
baseCurrency,
locale,
baseCurrency = DEFAULT_CURRENCY,
locale = DEFAULT_LOCALE,
xRayRules
}: UserSettings): Settings {
return {

6
apps/api/src/services/interfaces/environment.interface.ts

@ -38,9 +38,9 @@ export interface Environment extends CleanedEnvAccessors {
MAX_CHART_ITEMS: number;
OIDC_AUTHORIZATION_URL: string;
OIDC_CALLBACK_URL: string;
OIDC_CLIENT_ID: string;
OIDC_CLIENT_SECRET: string;
OIDC_ISSUER: string;
OIDC_CLIENT_ID?: string;
OIDC_CLIENT_SECRET?: string;
OIDC_ISSUER?: string;
OIDC_SCOPE: string[];
OIDC_TOKEN_URL: string;
OIDC_USER_INFO_URL: string;

Loading…
Cancel
Save