|
|
@ -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 } |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|