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 { 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';

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 {
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<Order> {
): Promise<DeleteActivityResponse> {
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<UpdateActivityResponse> {
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'
]);
}
}

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 { IsOptional, IsUUID } from 'class-validator';

4
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,

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,
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<Order>(`/api/v1/activities/${aId}`);
return this.http.delete<DeleteActivityResponse>(
`/api/v1/activities/${aId}`
);
}
public deleteBenchmark({ dataSource, symbol }: AssetProfileIdentifier) {
@ -952,7 +955,10 @@ export class DataService {
}
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) {

Loading…
Cancel
Save