Browse Source

Refactoring

pull/4016/head
Thomas Kaul 9 months ago
parent
commit
4e62fb4923
  1. 34
      apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.controller.ts
  2. 29
      apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts

34
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 { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator';
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; 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 { import {
DataProviderGhostfolioStatusResponse, DataProviderGhostfolioStatusResponse,
LookupResponse, LookupResponse,
@ -30,8 +27,6 @@ import { GhostfolioService } from './ghostfolio.service';
export class GhostfolioController { export class GhostfolioController {
public constructor( public constructor(
private readonly ghostfolioService: GhostfolioService, private readonly ghostfolioService: GhostfolioService,
private readonly prismaService: PrismaService,
private readonly propertyService: PropertyService,
@Inject(REQUEST) private readonly request: RequestWithUser @Inject(REQUEST) private readonly request: RequestWithUser
) {} ) {}
@ -45,7 +40,7 @@ export class GhostfolioController {
@Query('query') query = '' @Query('query') query = ''
): Promise<LookupResponse> { ): Promise<LookupResponse> {
const includeIndices = includeIndicesParam === 'true'; const includeIndices = includeIndicesParam === 'true';
const maxDailyRequests = await this.getMaxDailyRequests(); const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
if ( if (
this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
@ -62,7 +57,7 @@ export class GhostfolioController {
query: query.toLowerCase() query: query.toLowerCase()
}); });
await this.incrementDailyRequests({ await this.ghostfolioService.incrementDailyRequests({
userId: this.request.user.id userId: this.request.user.id
}); });
@ -81,7 +76,7 @@ export class GhostfolioController {
public async getQuotes( public async getQuotes(
@Query() query: GetQuotesDto @Query() query: GetQuotesDto
): Promise<QuotesResponse> { ): Promise<QuotesResponse> {
const maxDailyRequests = await this.getMaxDailyRequests(); const maxDailyRequests = await this.ghostfolioService.getMaxDailyRequests();
if ( if (
this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests this.request.user.dataProviderGhostfolioDailyRequests > maxDailyRequests
@ -97,7 +92,7 @@ export class GhostfolioController {
symbols: query.symbols symbols: query.symbols
}); });
await this.incrementDailyRequests({ await this.ghostfolioService.incrementDailyRequests({
userId: this.request.user.id userId: this.request.user.id
}); });
@ -116,26 +111,7 @@ export class GhostfolioController {
public async getStatus(): Promise<DataProviderGhostfolioStatusResponse> { public async getStatus(): Promise<DataProviderGhostfolioStatusResponse> {
return { return {
dailyRequests: this.request.user.dataProviderGhostfolioDailyRequests, 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 }
});
}
} }

29
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 { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service';
import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.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 { import {
DEFAULT_CURRENCY, DEFAULT_CURRENCY,
DERIVED_CURRENCIES DERIVED_CURRENCIES
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS } from '@ghostfolio/common/config';
import { import {
DataProviderInfo, DataProviderInfo,
LookupItem, LookupItem,
@ -13,16 +16,26 @@ import {
import { Injectable, Logger } from '@nestjs/common'; import { Injectable, Logger } from '@nestjs/common';
import { DataSource } from '@prisma/client'; import { DataSource } from '@prisma/client';
import { Big } from 'big.js';
import Big = require('big.js');
@Injectable() @Injectable()
export class GhostfolioService { export class GhostfolioService {
public constructor( public constructor(
private readonly configurationService: ConfigurationService, 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({ public async getQuotes({
requestTimeout, requestTimeout,
symbols 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({ public async lookup({
includeIndices = false, includeIndices = false,
query query

Loading…
Cancel
Save