Browse Source

Task/move activities controller to endpoints (#8343)

Move activities controller to endpoints
pull/8344/head
Thomas Kaul 5 days ago
committed by GitHub
parent
commit
74d14435db
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 2
      apps/api/src/app/app.module.ts
  2. 0
      apps/api/src/app/endpoints/activities/activities-filter.dto.ts
  3. 49
      apps/api/src/app/endpoints/activities/activities.controller.ts
  4. 0
      apps/api/src/app/endpoints/activities/activities.module.ts
  5. 0
      apps/api/src/app/endpoints/activities/get-activities.dto.ts
  6. 2
      apps/api/src/app/endpoints/export/get-export.dto.ts
  7. 4
      libs/common/src/lib/interfaces/index.ts
  8. 19
      libs/common/src/lib/interfaces/responses/delete-activity-response.interface.ts
  9. 19
      libs/common/src/lib/interfaces/responses/update-activity-response.interface.ts
  10. 12
      libs/ui/src/lib/services/data.service.ts

2
apps/api/src/app/app.module.ts

@ -35,11 +35,11 @@ import { ThrottlerModule } from '@nestjs/throttler';
import { getReasonPhrase, StatusCodes } from 'http-status-codes'; import { getReasonPhrase, StatusCodes } from 'http-status-codes';
import { join } from 'node:path'; import { join } from 'node:path';
import { ActivitiesModule } from './activities/activities.module';
import { AdminModule } from './admin/admin.module'; import { AdminModule } from './admin/admin.module';
import { AppController } from './app.controller'; import { AppController } from './app.controller';
import { AccessesModule } from './endpoints/accesses/accesses.module'; import { AccessesModule } from './endpoints/accesses/accesses.module';
import { AccountsModule } from './endpoints/accounts/accounts.module'; import { AccountsModule } from './endpoints/accounts/accounts.module';
import { ActivitiesModule } from './endpoints/activities/activities.module';
import { AiModule } from './endpoints/ai/ai.module'; import { AiModule } from './endpoints/ai/ai.module';
import { ApiKeysModule } from './endpoints/api-keys/api-keys.module'; import { ApiKeysModule } from './endpoints/api-keys/api-keys.module';
import { AssetProfilesModule } from './endpoints/asset-profiles/asset-profiles.module'; import { AssetProfilesModule } from './endpoints/asset-profiles/asset-profiles.module';

0
apps/api/src/app/activities/activities-filter.dto.ts → apps/api/src/app/endpoints/activities/activities-filter.dto.ts

49
apps/api/src/app/activities/activities.controller.ts → apps/api/src/app/endpoints/activities/activities.controller.ts

@ -18,7 +18,9 @@ import { SubscriptionType } from '@ghostfolio/common/enums';
import { import {
ActivitiesResponse, ActivitiesResponse,
ActivityResponse, ActivityResponse,
CreateActivityResponse CreateActivityResponse,
DeleteActivityResponse,
UpdateActivityResponse
} from '@ghostfolio/common/interfaces'; } from '@ghostfolio/common/interfaces';
import { permissions } from '@ghostfolio/common/permissions'; import { permissions } from '@ghostfolio/common/permissions';
import { scopes } from '@ghostfolio/common/scopes'; import { scopes } from '@ghostfolio/common/scopes';
@ -36,10 +38,9 @@ import {
Query, Query,
UseInterceptors UseInterceptors
} from '@nestjs/common'; } from '@nestjs/common';
import { Order } from '@prisma/client';
import { parseISO } from 'date-fns'; import { parseISO } from 'date-fns';
import { StatusCodes, getReasonPhrase } from 'http-status-codes'; 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 { ActivitiesFilterDto } from './activities-filter.dto';
import { GetActivitiesDto } from './get-activities.dto'; import { GetActivitiesDto } from './get-activities.dto';
@ -104,7 +105,7 @@ export class ActivitiesController {
public async deleteActivity( public async deleteActivity(
@Impersonation() { userId }: ImpersonationContext, @Impersonation() { userId }: ImpersonationContext,
@Param('id') id: string @Param('id') id: string
): Promise<Order> { ): Promise<DeleteActivityResponse> {
const activity = await this.activitiesService.order({ const activity = await this.activitiesService.order({
id, id,
userId userId
@ -117,9 +118,26 @@ export class ActivitiesController {
); );
} }
return this.activitiesService.deleteActivity({ const deletedActivity = await this.activitiesService.deleteActivity({
id id
}); });
return pick(deletedActivity, [
'accountId',
'accountUserId',
'comment',
'createdAt',
'currency',
'date',
'fee',
'id',
'quantity',
'symbolProfileId',
'type',
'unitPrice',
'updatedAt',
'userId'
]);
} }
@Get() @Get()
@ -328,7 +346,7 @@ export class ActivitiesController {
@Body() data: UpdateOrderDto, @Body() data: UpdateOrderDto,
@Impersonation() { userId }: ImpersonationContext, @Impersonation() { userId }: ImpersonationContext,
@Param('id') id: string @Param('id') id: string
) { ): Promise<UpdateActivityResponse> {
const originalActivity = await this.activitiesService.order({ const originalActivity = await this.activitiesService.order({
id, id,
userId userId
@ -357,7 +375,7 @@ export class ActivitiesController {
delete data.dataSource; delete data.dataSource;
return this.activitiesService.updateActivity({ const activity = await this.activitiesService.updateActivity({
userId, userId,
data: { data: {
...data, ...data,
@ -392,5 +410,22 @@ export class ActivitiesController {
id id
} }
}); });
return pick(activity, [
'accountId',
'accountUserId',
'comment',
'createdAt',
'currency',
'date',
'fee',
'id',
'quantity',
'symbolProfileId',
'type',
'unitPrice',
'updatedAt',
'userId'
]);
} }
} }

0
apps/api/src/app/activities/activities.module.ts → apps/api/src/app/endpoints/activities/activities.module.ts

0
apps/api/src/app/activities/get-activities.dto.ts → apps/api/src/app/endpoints/activities/get-activities.dto.ts

2
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 { Transform, TransformFnParams } from 'class-transformer';
import { IsOptional, IsUUID } from 'class-validator'; import { IsOptional, IsUUID } from 'class-validator';

4
libs/common/src/lib/interfaces/index.ts

@ -68,6 +68,7 @@ import type {
DataProviderResponse, DataProviderResponse,
DataProviderHistoricalResponse DataProviderHistoricalResponse
} from './responses/data-provider-response.interface'; } 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 { DividendsResponse } from './responses/dividends-response.interface';
import type { ResponseError } from './responses/errors.interface'; import type { ResponseError } from './responses/errors.interface';
import type { ExchangeRateResponse } from './responses/exchange-rate-response.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 { QuotesResponse } from './responses/quotes-response.interface';
import type { RedeemCouponResponse } from './responses/redeem-coupon-response.interface'; import type { RedeemCouponResponse } from './responses/redeem-coupon-response.interface';
import type { SymbolResponse } from './responses/symbol-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 { WatchlistResponse } from './responses/watchlist-response.interface';
import type { RuleSettings } from './rule-settings.interface'; import type { RuleSettings } from './rule-settings.interface';
import type { ScraperConfiguration } from './scraper-configuration.interface'; import type { ScraperConfiguration } from './scraper-configuration.interface';
@ -157,6 +159,7 @@ export {
DataProviderHistoricalResponse, DataProviderHistoricalResponse,
DataProviderInfo, DataProviderInfo,
DataProviderResponse, DataProviderResponse,
DeleteActivityResponse,
DividendsResponse, DividendsResponse,
EnhancedAssetProfile, EnhancedAssetProfile,
ExchangeRateResponse, ExchangeRateResponse,
@ -210,6 +213,7 @@ export {
SymbolItem, SymbolItem,
SymbolResponse, SymbolResponse,
SystemMessage, SystemMessage,
UpdateActivityResponse,
User, User,
UserItem, UserItem,
UserSettings, UserSettings,

19
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'
> {}

19
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'
> {}

12
libs/ui/src/lib/services/data.service.ts

@ -42,6 +42,7 @@ import {
CreateActivityResponse, CreateActivityResponse,
CreateStripeCheckoutSessionResponse, CreateStripeCheckoutSessionResponse,
DataProviderHealthResponse, DataProviderHealthResponse,
DeleteActivityResponse,
ExportResponse, ExportResponse,
Filter, Filter,
ImportResponse, ImportResponse,
@ -61,6 +62,7 @@ import {
PublicPortfolioResponse, PublicPortfolioResponse,
RedeemCouponResponse, RedeemCouponResponse,
SymbolResponse, SymbolResponse,
UpdateActivityResponse,
User, User,
UserItem, UserItem,
WatchlistResponse WatchlistResponse
@ -75,7 +77,6 @@ import type {
import type { import type {
Account, Account,
MarketData, MarketData,
Order,
SymbolProfile, SymbolProfile,
Tag, Tag,
User as UserModel User as UserModel
@ -353,7 +354,9 @@ export class DataService {
} }
public deleteActivity(aId: string) { public deleteActivity(aId: string) {
return this.http.delete<Order>(`/api/v1/activities/${aId}`); return this.http.delete<DeleteActivityResponse>(
`/api/v1/activities/${aId}`
);
} }
public deleteBenchmark({ dataSource, symbol }: AssetProfileIdentifier) { public deleteBenchmark({ dataSource, symbol }: AssetProfileIdentifier) {
@ -952,7 +955,10 @@ export class DataService {
} }
public putActivity(aOrder: UpdateOrderDto) { public putActivity(aOrder: UpdateOrderDto) {
return this.http.put<UserItem>(`/api/v1/activities/${aOrder.id}`, aOrder); return this.http.put<UpdateActivityResponse>(
`/api/v1/activities/${aOrder.id}`,
aOrder
);
} }
public putAdminSetting(key: string, aData: UpdatePropertyDto) { public putAdminSetting(key: string, aData: UpdatePropertyDto) {

Loading…
Cancel
Save