diff --git a/apps/api/src/app/app.module.ts b/apps/api/src/app/app.module.ts index 79a25c56ae..e7ead89675 100644 --- a/apps/api/src/app/app.module.ts +++ b/apps/api/src/app/app.module.ts @@ -35,11 +35,11 @@ import { ThrottlerModule } from '@nestjs/throttler'; import { getReasonPhrase, StatusCodes } from 'http-status-codes'; import { join } from 'node:path'; -import { ActivitiesModule } from './activities/activities.module'; import { AdminModule } from './admin/admin.module'; import { AppController } from './app.controller'; import { AccessesModule } from './endpoints/accesses/accesses.module'; import { AccountsModule } from './endpoints/accounts/accounts.module'; +import { ActivitiesModule } from './endpoints/activities/activities.module'; import { AiModule } from './endpoints/ai/ai.module'; import { ApiKeysModule } from './endpoints/api-keys/api-keys.module'; import { AssetProfilesModule } from './endpoints/asset-profiles/asset-profiles.module'; diff --git a/apps/api/src/app/activities/activities-filter.dto.ts b/apps/api/src/app/endpoints/activities/activities-filter.dto.ts similarity index 100% rename from apps/api/src/app/activities/activities-filter.dto.ts rename to apps/api/src/app/endpoints/activities/activities-filter.dto.ts diff --git a/apps/api/src/app/activities/activities.controller.ts b/apps/api/src/app/endpoints/activities/activities.controller.ts similarity index 92% rename from apps/api/src/app/activities/activities.controller.ts rename to apps/api/src/app/endpoints/activities/activities.controller.ts index d07651e6fb..6ac820874e 100644 --- a/apps/api/src/app/activities/activities.controller.ts +++ b/apps/api/src/app/endpoints/activities/activities.controller.ts @@ -18,7 +18,9 @@ import { SubscriptionType } from '@ghostfolio/common/enums'; import { ActivitiesResponse, ActivityResponse, - CreateActivityResponse + CreateActivityResponse, + DeleteActivityResponse, + UpdateActivityResponse } from '@ghostfolio/common/interfaces'; import { permissions } from '@ghostfolio/common/permissions'; import { scopes } from '@ghostfolio/common/scopes'; @@ -36,10 +38,9 @@ import { Query, UseInterceptors } from '@nestjs/common'; -import { Order } from '@prisma/client'; import { parseISO } from 'date-fns'; import { StatusCodes, getReasonPhrase } from 'http-status-codes'; -import { omit } from 'lodash-es'; +import { omit, pick } from 'lodash-es'; import { ActivitiesFilterDto } from './activities-filter.dto'; import { GetActivitiesDto } from './get-activities.dto'; @@ -104,7 +105,7 @@ export class ActivitiesController { public async deleteActivity( @Impersonation() { userId }: ImpersonationContext, @Param('id') id: string - ): Promise { + ): Promise { const activity = await this.activitiesService.order({ id, userId @@ -117,9 +118,26 @@ export class ActivitiesController { ); } - return this.activitiesService.deleteActivity({ + const deletedActivity = await this.activitiesService.deleteActivity({ id }); + + return pick(deletedActivity, [ + 'accountId', + 'accountUserId', + 'comment', + 'createdAt', + 'currency', + 'date', + 'fee', + 'id', + 'quantity', + 'symbolProfileId', + 'type', + 'unitPrice', + 'updatedAt', + 'userId' + ]); } @Get() @@ -328,7 +346,7 @@ export class ActivitiesController { @Body() data: UpdateOrderDto, @Impersonation() { userId }: ImpersonationContext, @Param('id') id: string - ) { + ): Promise { const originalActivity = await this.activitiesService.order({ id, userId @@ -357,7 +375,7 @@ export class ActivitiesController { delete data.dataSource; - return this.activitiesService.updateActivity({ + const activity = await this.activitiesService.updateActivity({ userId, data: { ...data, @@ -392,5 +410,22 @@ export class ActivitiesController { id } }); + + return pick(activity, [ + 'accountId', + 'accountUserId', + 'comment', + 'createdAt', + 'currency', + 'date', + 'fee', + 'id', + 'quantity', + 'symbolProfileId', + 'type', + 'unitPrice', + 'updatedAt', + 'userId' + ]); } } diff --git a/apps/api/src/app/activities/activities.module.ts b/apps/api/src/app/endpoints/activities/activities.module.ts similarity index 100% rename from apps/api/src/app/activities/activities.module.ts rename to apps/api/src/app/endpoints/activities/activities.module.ts diff --git a/apps/api/src/app/activities/get-activities.dto.ts b/apps/api/src/app/endpoints/activities/get-activities.dto.ts similarity index 100% rename from apps/api/src/app/activities/get-activities.dto.ts rename to apps/api/src/app/endpoints/activities/get-activities.dto.ts diff --git a/apps/api/src/app/endpoints/export/get-export.dto.ts b/apps/api/src/app/endpoints/export/get-export.dto.ts index 524c357112..e7c76e4061 100644 --- a/apps/api/src/app/endpoints/export/get-export.dto.ts +++ b/apps/api/src/app/endpoints/export/get-export.dto.ts @@ -1,4 +1,4 @@ -import { ActivitiesFilterDto } from '@ghostfolio/api/app/activities/activities-filter.dto'; +import { ActivitiesFilterDto } from '@ghostfolio/api/app/endpoints/activities/activities-filter.dto'; import { Transform, TransformFnParams } from 'class-transformer'; import { IsOptional, IsUUID } from 'class-validator'; diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 675e23f603..b1d7494841 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -68,6 +68,7 @@ import type { DataProviderResponse, DataProviderHistoricalResponse } from './responses/data-provider-response.interface'; +import type { DeleteActivityResponse } from './responses/delete-activity-response.interface'; import type { DividendsResponse } from './responses/dividends-response.interface'; import type { ResponseError } from './responses/errors.interface'; import type { ExchangeRateResponse } from './responses/exchange-rate-response.interface'; @@ -91,6 +92,7 @@ import type { PublicPortfolioResponse } from './responses/public-portfolio-respo import type { QuotesResponse } from './responses/quotes-response.interface'; import type { RedeemCouponResponse } from './responses/redeem-coupon-response.interface'; import type { SymbolResponse } from './responses/symbol-response.interface'; +import type { UpdateActivityResponse } from './responses/update-activity-response.interface'; import type { WatchlistResponse } from './responses/watchlist-response.interface'; import type { RuleSettings } from './rule-settings.interface'; import type { ScraperConfiguration } from './scraper-configuration.interface'; @@ -157,6 +159,7 @@ export { DataProviderHistoricalResponse, DataProviderInfo, DataProviderResponse, + DeleteActivityResponse, DividendsResponse, EnhancedAssetProfile, ExchangeRateResponse, @@ -210,6 +213,7 @@ export { SymbolItem, SymbolResponse, SystemMessage, + UpdateActivityResponse, User, UserItem, UserSettings, diff --git a/libs/common/src/lib/interfaces/responses/delete-activity-response.interface.ts b/libs/common/src/lib/interfaces/responses/delete-activity-response.interface.ts new file mode 100644 index 0000000000..813340b7ff --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/delete-activity-response.interface.ts @@ -0,0 +1,19 @@ +import type { Order } from '@ghostfolio/prisma/browser'; + +export interface DeleteActivityResponse extends Pick< + Order, + | 'accountId' + | 'accountUserId' + | 'comment' + | 'createdAt' + | 'currency' + | 'date' + | 'fee' + | 'id' + | 'quantity' + | 'symbolProfileId' + | 'type' + | 'unitPrice' + | 'updatedAt' + | 'userId' +> {} diff --git a/libs/common/src/lib/interfaces/responses/update-activity-response.interface.ts b/libs/common/src/lib/interfaces/responses/update-activity-response.interface.ts new file mode 100644 index 0000000000..876e072211 --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/update-activity-response.interface.ts @@ -0,0 +1,19 @@ +import type { Order } from '@ghostfolio/prisma/browser'; + +export interface UpdateActivityResponse extends Pick< + Order, + | 'accountId' + | 'accountUserId' + | 'comment' + | 'createdAt' + | 'currency' + | 'date' + | 'fee' + | 'id' + | 'quantity' + | 'symbolProfileId' + | 'type' + | 'unitPrice' + | 'updatedAt' + | 'userId' +> {} diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts index 6161f776e8..50da312f46 100644 --- a/libs/ui/src/lib/services/data.service.ts +++ b/libs/ui/src/lib/services/data.service.ts @@ -42,6 +42,7 @@ import { CreateActivityResponse, CreateStripeCheckoutSessionResponse, DataProviderHealthResponse, + DeleteActivityResponse, ExportResponse, Filter, ImportResponse, @@ -61,6 +62,7 @@ import { PublicPortfolioResponse, RedeemCouponResponse, SymbolResponse, + UpdateActivityResponse, User, UserItem, WatchlistResponse @@ -75,7 +77,6 @@ import type { import type { Account, MarketData, - Order, SymbolProfile, Tag, User as UserModel @@ -353,7 +354,9 @@ export class DataService { } public deleteActivity(aId: string) { - return this.http.delete(`/api/v1/activities/${aId}`); + return this.http.delete( + `/api/v1/activities/${aId}` + ); } public deleteBenchmark({ dataSource, symbol }: AssetProfileIdentifier) { @@ -952,7 +955,10 @@ export class DataService { } public putActivity(aOrder: UpdateOrderDto) { - return this.http.put(`/api/v1/activities/${aOrder.id}`, aOrder); + return this.http.put( + `/api/v1/activities/${aOrder.id}`, + aOrder + ); } public putAdminSetting(key: string, aData: UpdatePropertyDto) {