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 9b9020451..b17e80a8d 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,15 +1,19 @@ import { LookupItem } from '@ghostfolio/api/app/symbol/interfaces/lookup-item.interface'; 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 { permissions } from '@ghostfolio/common/permissions'; +import { RequestWithUser } from '@ghostfolio/common/types'; import { Controller, Get, HttpException, + Inject, Query, UseGuards } from '@nestjs/common'; +import { REQUEST } from '@nestjs/core'; import { AuthGuard } from '@nestjs/passport'; import { getReasonPhrase, StatusCodes } from 'http-status-codes'; @@ -17,7 +21,11 @@ import { GhostfolioService } from './ghostfolio.service'; @Controller('data-providers/ghostfolio') export class GhostfolioController { - public constructor(private readonly ghostfolioService: GhostfolioService) {} + public constructor( + private readonly ghostfolioService: GhostfolioService, + private readonly prismaService: PrismaService, + @Inject(REQUEST) private readonly request: RequestWithUser + ) {} @Get('lookup') @HasPermission(permissions.enableDataProviderGhostfolio) @@ -29,10 +37,16 @@ export class GhostfolioController { const includeIndices = includeIndicesParam === 'true'; try { - return this.ghostfolioService.lookup({ + const result = await this.ghostfolioService.lookup({ includeIndices, query: query.toLowerCase() }); + + await this.incrementDailyRequests({ + userId: this.request.user.id + }); + + return result; } catch { throw new HttpException( getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR), @@ -40,4 +54,14 @@ export class GhostfolioController { ); } } + + private async incrementDailyRequests({ userId }: { userId: string }) { + await this.prismaService.analytics.update({ + data: { + dataProviderGhostfolioDailyRequests: { increment: 1 }, + lastRequestAt: new Date() + }, + where: { userId } + }); + } }