From 4e62fb4923544218d3df3a4a5b4a85b4470f3bd3 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 23 Nov 2024 10:48:34 +0100 Subject: [PATCH] Refactoring --- .../ghostfolio/ghostfolio.controller.ts | 34 +++---------------- .../ghostfolio/ghostfolio.service.ts | 29 ++++++++++++++-- 2 files changed, 31 insertions(+), 32 deletions(-) diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts index 47059cf2c..6a85b9252 100644 --- a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts +++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts @@ -1,8 +1,5 @@ import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; -import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; -import { PropertyService } from '@ghostfolio/api/services/property/property.service'; -import { PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS } from '@ghostfolio/common/config'; import { DataProviderGhostfolioStatusResponse, LookupResponse, @@ -30,8 +27,6 @@ import { GhostfolioService } from './ghostfolio.service'; export class GhostfolioController { public constructor( private readonly ghostfolioService: GhostfolioService, - private readonly prismaService: PrismaService, - private readonly propertyService: PropertyService, @Inject(REQUEST) private readonly request: RequestWithUser ) {} @@ -45,7 +40,7 @@ export class GhostfolioController { @Query('query') query = '' ): Promise { const includeIndices = includeIndicesParam === 'true'; - const maxDailyRequests = await this.getMaxDailyRequests(); + const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests(); if ( this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests @@ -62,7 +57,7 @@ export class GhostfolioController { query: query.toLowerCase() }); - await this.incrementDailyRequests({ + await this.ghostfolioService.incrementDailyRequests({ userId: this.request.user.id }); @@ -81,7 +76,7 @@ export class GhostfolioController { public async getQuotes( @Query() query: GetQuotesDto ): Promise { - const maxDailyRequests = await this.getMaxDailyRequests(); + const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests(); if ( this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests @@ -97,7 +92,7 @@ export class GhostfolioController { symbols: query.symbols }); - await this.incrementDailyRequests({ + await this.ghostfolioService.incrementDailyRequests({ userId: this.request.user.id }); @@ -116,26 +111,7 @@ export class GhostfolioController { public async getStatus(): Promise { return { dailyRequests: this.request.user.dataProviderGhostfolioDailyRequests, - dailyRequestsMax: await this.getMaxDailyRequests() + dailyRequestsMax: await this.ghostfolioService.getMaxDailyRequests() }; } - - private async getMaxDailyRequests() { - return parseInt( - ((await this.propertyService.getByKey( - PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS - )) as string) || '0', - 10 - ); - } - - private async incrementDailyRequests({ userId }: { userId: string }) { - await this.prismaService.analytics.update({ - data: { - dataProviderGhostfolioDailyRequests: { increment: 1 }, - lastRequestAt: new Date() - }, - where: { userId } - }); - } } diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts index 82bc68dee..0b818cc0a 100644 --- a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts +++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts @@ -1,9 +1,12 @@ import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; +import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; +import { PropertyService } from '@ghostfolio/api/services/property/property.service'; import { DEFAULT_CURRENCY, DERIVED_CURRENCIES } from '@ghostfolio/common/config'; +import { PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS } from '@ghostfolio/common/config'; import { DataProviderInfo, LookupItem, @@ -13,16 +16,26 @@ import { import { Injectable, Logger } from '@nestjs/common'; import { DataSource } from '@prisma/client'; - -import Big = require('big.js'); +import { Big } from 'big.js'; @Injectable() export class GhostfolioService { public constructor( private readonly configurationService: ConfigurationService, - private readonly dataProviderService: DataProviderService + private readonly dataProviderService: DataProviderService, + private readonly prismaService: PrismaService, + private readonly propertyService: PropertyService ) {} + public async getMaxDailyRequests() { + return parseInt( + ((await this.propertyService.getByKey( + PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS + )) as string) || '0', + 10 + ); + } + public async getQuotes({ requestTimeout, symbols @@ -107,6 +120,16 @@ export class GhostfolioService { } } + public async incrementDailyRequests({ userId }: { userId: string }) { + await this.prismaService.analytics.update({ + data: { + dataProviderGhostfolioDailyRequests: { increment: 1 }, + lastRequestAt: new Date() + }, + where: { userId } + }); + } + public async lookup({ includeIndices = false, query