Browse Source

Fix import of activities with Ghostfolio AI

pull/8128/head
Thomas Kaul 4 days ago
parent
commit
393b135ffa
  1. 6
      apps/api/src/app/endpoints/ai/ai.controller.spec.ts
  2. 6
      apps/api/src/app/endpoints/ai/ai.controller.ts
  3. 2
      apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts
  4. 1
      libs/common/src/lib/config.ts

6
apps/api/src/app/endpoints/ai/ai.controller.spec.ts

@ -7,7 +7,7 @@ import {
AI_ACTIVITIES_TIMEOUT, AI_ACTIVITIES_TIMEOUT,
AI_MAX_ACTIVITIES, AI_MAX_ACTIVITIES,
THROTTLE_AI_ACTIVITIES_LIMIT, THROTTLE_AI_ACTIVITIES_LIMIT,
THROTTLE_DAILY_TTL THROTTLE_AI_ACTIVITIES_TTL
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { permissions } from '@ghostfolio/common/permissions'; import { permissions } from '@ghostfolio/common/permissions';
import type { RequestWithUser } from '@ghostfolio/common/types'; import type { RequestWithUser } from '@ghostfolio/common/types';
@ -93,7 +93,7 @@ describe('AiController', () => {
}); });
describe('getActivitiesFromFile', () => { describe('getActivitiesFromFile', () => {
it('Requires the permission and limits the requests of each user per day', () => { it('Requires the permission and limits the requests of each user per week', () => {
expect(getMetadataOfMethod<string>(HAS_PERMISSION_KEY)).toBe( expect(getMetadataOfMethod<string>(HAS_PERMISSION_KEY)).toBe(
permissions.importActivitiesWithAi permissions.importActivitiesWithAi
); );
@ -110,7 +110,7 @@ describe('AiController', () => {
); );
expect(getMetadataOfMethod<number>(`${THROTTLER_TTL}default`)).toBe( expect(getMetadataOfMethod<number>(`${THROTTLER_TTL}default`)).toBe(
THROTTLE_DAILY_TTL THROTTLE_AI_ACTIVITIES_TTL
); );
expect( expect(

6
apps/api/src/app/endpoints/ai/ai.controller.ts

@ -12,7 +12,7 @@ import {
AI_ACTIVITIES_TIMEOUT, AI_ACTIVITIES_TIMEOUT,
AI_MAX_ACTIVITIES, AI_MAX_ACTIVITIES,
THROTTLE_AI_ACTIVITIES_LIMIT, THROTTLE_AI_ACTIVITIES_LIMIT,
THROTTLE_DAILY_TTL THROTTLE_AI_ACTIVITIES_TTL
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { import {
AiActivitiesResponse, AiActivitiesResponse,
@ -67,7 +67,7 @@ export class AiController {
/** /**
* Reads the activities of a CSV, JPEG, PDF or PNG file with Ghostfolio AI, * Reads the activities of a CSV, JPEG, PDF or PNG file with Ghostfolio AI,
* without saving anything. The client imports the activities which the user * without saving anything. The client imports the activities which the user
* selects with POST api/v1/import. The daily limit applies to each user * selects with POST api/v1/import. The weekly limit applies to each user
* instead of each IP address. The models stop if the client closes the * instead of each IP address. The models stop if the client closes the
* request before the response or at the timeout. An error whose message is * request before the response or at the timeout. An error whose message is
* written for the caller gives the status 400 with this message, the * written for the caller gives the status 400 with this message, the
@ -82,7 +82,7 @@ export class AiController {
return user.id; return user.id;
}, },
limit: THROTTLE_AI_ACTIVITIES_LIMIT, limit: THROTTLE_AI_ACTIVITIES_LIMIT,
ttl: THROTTLE_DAILY_TTL ttl: THROTTLE_AI_ACTIVITIES_TTL
} }
}) })
@UseGuards(AuthGuard('jwt'), HasPermissionGuard, CustomThrottlerGuard) @UseGuards(AuthGuard('jwt'), HasPermissionGuard, CustomThrottlerGuard)

2
apps/client/src/app/pages/portfolio/activities/import-activities-dialog/import-activities-dialog.component.ts

@ -371,7 +371,7 @@ export class GfImportActivitiesDialogComponent {
/** /**
* Gives the error message of a file which the server rejects, as a rejected * Gives the error message of a file which the server rejects, as a rejected
* file counts towards the daily limit of Ghostfolio AI * file counts towards the weekly limit of Ghostfolio AI
*/ */
private async getErrorMessageOfFileForGhostfolioAi({ private async getErrorMessageOfFileForGhostfolioAi({
file, file,

1
libs/common/src/lib/config.ts

@ -420,6 +420,7 @@ export const TAG_IDS_SYSTEM = [
]; ];
export const THROTTLE_AI_ACTIVITIES_LIMIT = 25; export const THROTTLE_AI_ACTIVITIES_LIMIT = 25;
export const THROTTLE_AI_ACTIVITIES_TTL = ms('1 week');
export const THROTTLE_DAILY_KEY = 'daily'; export const THROTTLE_DAILY_KEY = 'daily';
export const THROTTLE_DAILY_TTL = ms('1 day'); export const THROTTLE_DAILY_TTL = ms('1 day');
export const THROTTLE_DEFAULT_LIMIT = 10; export const THROTTLE_DEFAULT_LIMIT = 10;

Loading…
Cancel
Save