diff --git a/apps/api/src/app/endpoints/public/public.controller.ts b/apps/api/src/app/endpoints/public/public.controller.ts index 9bd2a78a8..67bed71ef 100644 --- a/apps/api/src/app/endpoints/public/public.controller.ts +++ b/apps/api/src/app/endpoints/public/public.controller.ts @@ -65,7 +65,7 @@ export class PublicController { }); if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) { - hasDetails = user.subscription.type === SubscriptionType.Premium; + hasDetails = user?.subscription?.type === SubscriptionType.Premium; } const { filters } = (access.settings ?? {}) as AccessSettings; @@ -98,7 +98,7 @@ export class PublicController { sortDirection: 'desc', take: 10, types: [ActivityType.BUY, ActivityType.SELL], - userCurrency: user.settings?.settings.baseCurrency ?? DEFAULT_CURRENCY, + userCurrency: user?.settings?.settings.baseCurrency ?? DEFAULT_CURRENCY, userId: user.id, withExcludedAccountsAndActivities: false }); @@ -167,7 +167,7 @@ export class PublicController { this.exchangeRateDataService.toCurrency( quantity * marketPrice, assetProfile.currency, - user.settings?.settings.baseCurrency ?? DEFAULT_CURRENCY + user?.settings?.settings.baseCurrency ?? DEFAULT_CURRENCY ) ); }) diff --git a/apps/api/src/app/import/import.controller.ts b/apps/api/src/app/import/import.controller.ts index c3e79a29f..c2d53e3cb 100644 --- a/apps/api/src/app/import/import.controller.ts +++ b/apps/api/src/app/import/import.controller.ts @@ -65,7 +65,7 @@ export class ImportController { if ( this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') && - this.request.user.subscription.type === SubscriptionType.Premium + this.request.user.subscription?.type === SubscriptionType.Premium ) { maxActivitiesToImport = Number.MAX_SAFE_INTEGER; } @@ -109,7 +109,7 @@ export class ImportController { if ( this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') && - this.request.user.subscription.type === SubscriptionType.Premium + this.request.user.subscription?.type === SubscriptionType.Premium ) { maxActivitiesToImport = Number.MAX_SAFE_INTEGER; } diff --git a/apps/api/src/app/portfolio/portfolio.controller.ts b/apps/api/src/app/portfolio/portfolio.controller.ts index 13cc0eae7..175532cad 100644 --- a/apps/api/src/app/portfolio/portfolio.controller.ts +++ b/apps/api/src/app/portfolio/portfolio.controller.ts @@ -97,7 +97,7 @@ export class PortfolioController { if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) { hasDetails = - this.request.user.subscription.type === SubscriptionType.Premium; + this.request.user.subscription?.type === SubscriptionType.Premium; } const filters = this.apiService.buildFiltersFromQueryParams({ @@ -383,7 +383,7 @@ export class PortfolioController { if ( this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') && - this.request.user.subscription.type === SubscriptionType.Basic + this.request.user.subscription?.type === SubscriptionType.Basic ) { dividends = dividends.map((item) => { return nullifyValuesInObject(item, ['investment']); @@ -511,7 +511,7 @@ export class PortfolioController { if ( this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') && - this.request.user.subscription.type === SubscriptionType.Basic + this.request.user.subscription?.type === SubscriptionType.Basic ) { investments = investments.map((item) => { return nullifyValuesInObject(item, ['investment']); @@ -623,7 +623,7 @@ export class PortfolioController { if ( this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') && - this.request.user.subscription.type === SubscriptionType.Basic + this.request.user.subscription?.type === SubscriptionType.Basic ) { performanceInformation.chart = performanceInformation.chart.map( (item) => { @@ -651,7 +651,7 @@ export class PortfolioController { if ( this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') && - this.request.user.subscription.type === SubscriptionType.Basic + this.request.user.subscription?.type === SubscriptionType.Basic ) { for (const category of report.xRay.categories) { category.rules = null; diff --git a/apps/api/src/app/subscription/subscription.service.ts b/apps/api/src/app/subscription/subscription.service.ts index 83aee7c8e..1dba93d47 100644 --- a/apps/api/src/app/subscription/subscription.service.ts +++ b/apps/api/src/app/subscription/subscription.service.ts @@ -149,7 +149,7 @@ export class SubscriptionService { } const subscriptionOffer: SubscriptionOffer = JSON.parse( - session.metadata.subscriptionOffer ?? '{}' + session.metadata?.subscriptionOffer ?? '{}' ); const durationExtension = subscriptionOffer?.durationExtension; diff --git a/apps/api/src/services/benchmark/benchmark.service.ts b/apps/api/src/services/benchmark/benchmark.service.ts index affb0da08..17e729f9f 100644 --- a/apps/api/src/services/benchmark/benchmark.service.ts +++ b/apps/api/src/services/benchmark/benchmark.service.ts @@ -18,7 +18,6 @@ import { BenchmarkProperty, BenchmarkResponse } from '@ghostfolio/common/interfaces'; -import { BenchmarkTrend } from '@ghostfolio/common/types'; import { Injectable, Logger } from '@nestjs/common'; import { SymbolProfile } from '@prisma/client'; @@ -146,7 +145,7 @@ export class BenchmarkService { public async addBenchmark({ dataSource, symbol - }: AssetProfileIdentifier): Promise> { + }: AssetProfileIdentifier): Promise | undefined> { const assetProfile = await this.prismaService.symbolProfile.findFirst({ where: { dataSource, @@ -183,7 +182,7 @@ export class BenchmarkService { public async deleteBenchmark({ dataSource, symbol - }: AssetProfileIdentifier): Promise> { + }: AssetProfileIdentifier): Promise | null> { const assetProfile = await this.prismaService.symbolProfile.findFirst({ where: { dataSource, @@ -240,12 +239,12 @@ export class BenchmarkService { enableSharing }); - const promisesAllTimeHighs: Promise<{ date: Date; marketPrice: number }>[] = - []; - const promisesBenchmarkTrends: Promise<{ - trend50d: BenchmarkTrend; - trend200d: BenchmarkTrend; - }>[] = []; + const promisesAllTimeHighs: ReturnType< + typeof this.marketDataService.getMax + >[] = []; + const promisesBenchmarkTrends: ReturnType< + typeof this.getBenchmarkTrends + >[] = []; const quotes = await this.dataProviderService.getQuotes({ items: benchmarkAssetProfiles.map(({ dataSource, symbol }) => { diff --git a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts index 85ec6c020..749f10c12 100644 --- a/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts +++ b/apps/api/src/services/data-provider/data-enhancer/yahoo-finance/yahoo-finance.service.ts @@ -200,13 +200,13 @@ export class YahooFinanceDataEnhancerService implements DataEnhancerInterface { response.assetClass = assetClass; response.assetSubClass = assetSubClass; - response.currency = assetProfile.price.currency; + response.currency = assetProfile.price?.currency; response.dataSource = this.getName(); response.name = this.formatName({ - longName: assetProfile.price.longName, - quoteType: assetProfile.price.quoteType, - shortName: assetProfile.price.shortName, - symbol: assetProfile.price.symbol + longName: assetProfile.price?.longName, + quoteType: assetProfile.price?.quoteType, + shortName: assetProfile.price?.shortName, + symbol: assetProfile.price?.symbol }); response.symbol = this.convertFromYahooFinanceSymbol( assetProfile.price.symbol diff --git a/apps/api/src/services/data-provider/data-provider.service.ts b/apps/api/src/services/data-provider/data-provider.service.ts index 49f5f68f4..e8d5f5030 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -99,7 +99,7 @@ export class DataProviderService implements OnModuleInit { return dataSource; }); - const promises = []; + const promises: Promise[] = []; for (const [dataSource, assetProfileIdentifiers] of Object.entries( itemsGroupedByDataSource @@ -248,7 +248,7 @@ export class DataProviderService implements OnModuleInit { if ( this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') && - user.subscription.type === SubscriptionType.Basic + user.subscription?.type === SubscriptionType.Basic ) { const dataProvider = this.getDataProvider(DataSource[dataSource]); @@ -660,7 +660,7 @@ export class DataProviderService implements OnModuleInit { } else if ( dataProvider.getDataProviderInfo().isPremium && this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION') && - user?.subscription.type === SubscriptionType.Basic + user?.subscription?.type === SubscriptionType.Basic ) { // Skip symbols of Premium data providers for users without subscription return false; @@ -876,7 +876,7 @@ export class DataProviderService implements OnModuleInit { }) .map((lookupItem) => { if (this.configurationService.get('ENABLE_FEATURE_SUBSCRIPTION')) { - if (user.subscription.type === SubscriptionType.Premium) { + if (user.subscription?.type === SubscriptionType.Premium) { lookupItem.dataProviderInfo.isPremium = false; }