From b92eff5b7287f28390208d49de1b7a4e4cfa7344 Mon Sep 17 00:00:00 2001 From: Renegade Solutions Date: Wed, 18 Jun 2025 12:21:46 -0600 Subject: [PATCH] Feature/switch data provider service to OnModuleInit ensuring (currency) quotes are fetched only once (#4944) * Switch data provider service to OnModuleInit ensuring (currency) quotes are fetched only once * Update changelog --- CHANGELOG.md | 1 + .../services/data-provider/data-provider.service.ts | 10 ++++------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index feac50910..d53c7f00a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Adapted the options of the date range selector in the assistant dynamically based on the user’s first activity +- Switched the data provider service to `OnModuleInit`, ensuring (currency) quotes are fetched only once - Migrated the `@ghostfolio/ui/assistant` component to control flow - Migrated the `@ghostfolio/ui/value` component to control flow - Improved the language localization for Chinese (`zh`) 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 348935101..606da5b88 100644 --- a/apps/api/src/services/data-provider/data-provider.service.ts +++ b/apps/api/src/services/data-provider/data-provider.service.ts @@ -29,7 +29,7 @@ import { import { hasRole } from '@ghostfolio/common/permissions'; import type { Granularity, UserWithSettings } from '@ghostfolio/common/types'; -import { Inject, Injectable, Logger } from '@nestjs/common'; +import { Inject, Injectable, Logger, OnModuleInit } from '@nestjs/common'; import { DataSource, MarketData, SymbolProfile } from '@prisma/client'; import { Big } from 'big.js'; import { eachDayOfInterval, format, isBefore, isValid } from 'date-fns'; @@ -37,7 +37,7 @@ import { groupBy, isEmpty, isNumber, uniqWith } from 'lodash'; import ms from 'ms'; @Injectable() -export class DataProviderService { +export class DataProviderService implements OnModuleInit { private dataProviderMapping: { [dataProviderName: string]: string }; public constructor( @@ -48,11 +48,9 @@ export class DataProviderService { private readonly prismaService: PrismaService, private readonly propertyService: PropertyService, private readonly redisCacheService: RedisCacheService - ) { - this.initialize(); - } + ) {} - public async initialize() { + public async onModuleInit() { this.dataProviderMapping = ((await this.propertyService.getByKey(PROPERTY_DATA_SOURCE_MAPPING)) as { [dataProviderName: string]: string;