|
|
@ -37,20 +37,24 @@ import { |
|
|
} from '@nestjs/common'; |
|
|
} from '@nestjs/common'; |
|
|
import { REQUEST } from '@nestjs/core'; |
|
|
import { REQUEST } from '@nestjs/core'; |
|
|
import { AuthGuard } from '@nestjs/passport'; |
|
|
import { AuthGuard } from '@nestjs/passport'; |
|
|
import { Order as OrderModel, Prisma } from '@prisma/client'; |
|
|
import { Order, Prisma } 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 { OrderService } from './order.service'; |
|
|
import { ActivitiesService } from './activities.service'; |
|
|
|
|
|
|
|
|
@Controller('order') |
|
|
@Controller([ |
|
|
export class OrderController { |
|
|
'activities', |
|
|
|
|
|
/** @deprecated */ |
|
|
|
|
|
'order' |
|
|
|
|
|
]) |
|
|
|
|
|
export class ActivitiesController { |
|
|
public constructor( |
|
|
public constructor( |
|
|
|
|
|
private readonly activitiesService: ActivitiesService, |
|
|
private readonly apiService: ApiService, |
|
|
private readonly apiService: ApiService, |
|
|
private readonly dataProviderService: DataProviderService, |
|
|
private readonly dataProviderService: DataProviderService, |
|
|
private readonly dataGatheringService: DataGatheringService, |
|
|
private readonly dataGatheringService: DataGatheringService, |
|
|
private readonly impersonationService: ImpersonationService, |
|
|
private readonly impersonationService: ImpersonationService, |
|
|
private readonly orderService: OrderService, |
|
|
|
|
|
@Inject(REQUEST) private readonly request: RequestWithUser |
|
|
@Inject(REQUEST) private readonly request: RequestWithUser |
|
|
) {} |
|
|
) {} |
|
|
|
|
|
|
|
|
@ -58,7 +62,7 @@ export class OrderController { |
|
|
@HasPermission(permissions.deleteOrder) |
|
|
@HasPermission(permissions.deleteOrder) |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
@UseInterceptors(TransformDataSourceInRequestInterceptor) |
|
|
@UseInterceptors(TransformDataSourceInRequestInterceptor) |
|
|
public async deleteOrders( |
|
|
public async deleteActivities( |
|
|
@Query('accounts') filterByAccounts?: string, |
|
|
@Query('accounts') filterByAccounts?: string, |
|
|
@Query('assetClasses') filterByAssetClasses?: string, |
|
|
@Query('assetClasses') filterByAssetClasses?: string, |
|
|
@Query('dataSource') filterByDataSource?: string, |
|
|
@Query('dataSource') filterByDataSource?: string, |
|
|
@ -73,7 +77,7 @@ export class OrderController { |
|
|
filterByTags |
|
|
filterByTags |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
return this.orderService.deleteOrders({ |
|
|
return this.activitiesService.deleteActivities({ |
|
|
filters, |
|
|
filters, |
|
|
userId: this.request.user.id |
|
|
userId: this.request.user.id |
|
|
}); |
|
|
}); |
|
|
@ -82,20 +86,20 @@ export class OrderController { |
|
|
@Delete(':id') |
|
|
@Delete(':id') |
|
|
@HasPermission(permissions.deleteOrder) |
|
|
@HasPermission(permissions.deleteOrder) |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
public async deleteOrder(@Param('id') id: string): Promise<OrderModel> { |
|
|
public async deleteActivity(@Param('id') id: string): Promise<Order> { |
|
|
const order = await this.orderService.order({ |
|
|
const activity = await this.activitiesService.order({ |
|
|
id, |
|
|
id, |
|
|
userId: this.request.user.id |
|
|
userId: this.request.user.id |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
if (!order) { |
|
|
if (!activity) { |
|
|
throw new HttpException( |
|
|
throw new HttpException( |
|
|
getReasonPhrase(StatusCodes.FORBIDDEN), |
|
|
getReasonPhrase(StatusCodes.FORBIDDEN), |
|
|
StatusCodes.FORBIDDEN |
|
|
StatusCodes.FORBIDDEN |
|
|
); |
|
|
); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return this.orderService.deleteOrder({ |
|
|
return this.activitiesService.deleteActivity({ |
|
|
id |
|
|
id |
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
|
@ -105,7 +109,7 @@ export class OrderController { |
|
|
@UseInterceptors(RedactValuesInResponseInterceptor) |
|
|
@UseInterceptors(RedactValuesInResponseInterceptor) |
|
|
@UseInterceptors(TransformDataSourceInRequestInterceptor) |
|
|
@UseInterceptors(TransformDataSourceInRequestInterceptor) |
|
|
@UseInterceptors(TransformDataSourceInResponseInterceptor) |
|
|
@UseInterceptors(TransformDataSourceInResponseInterceptor) |
|
|
public async getAllOrders( |
|
|
public async getAllActivities( |
|
|
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string, |
|
|
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string, |
|
|
@Query('accounts') filterByAccounts?: string, |
|
|
@Query('accounts') filterByAccounts?: string, |
|
|
@Query('assetClasses') filterByAssetClasses?: string, |
|
|
@Query('assetClasses') filterByAssetClasses?: string, |
|
|
@ -137,7 +141,7 @@ export class OrderController { |
|
|
await this.impersonationService.validateImpersonationId(impersonationId); |
|
|
await this.impersonationService.validateImpersonationId(impersonationId); |
|
|
const userCurrency = this.request.user.settings.settings.baseCurrency; |
|
|
const userCurrency = this.request.user.settings.settings.baseCurrency; |
|
|
|
|
|
|
|
|
const { activities, count } = await this.orderService.getOrders({ |
|
|
const { activities, count } = await this.activitiesService.getActivities({ |
|
|
endDate, |
|
|
endDate, |
|
|
filters, |
|
|
filters, |
|
|
sortColumn, |
|
|
sortColumn, |
|
|
@ -158,7 +162,7 @@ export class OrderController { |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
@UseInterceptors(RedactValuesInResponseInterceptor) |
|
|
@UseInterceptors(RedactValuesInResponseInterceptor) |
|
|
@UseInterceptors(TransformDataSourceInResponseInterceptor) |
|
|
@UseInterceptors(TransformDataSourceInResponseInterceptor) |
|
|
public async getOrderById( |
|
|
public async getActivityById( |
|
|
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string, |
|
|
@Headers(HEADER_KEY_IMPERSONATION.toLowerCase()) impersonationId: string, |
|
|
@Param('id') id: string |
|
|
@Param('id') id: string |
|
|
): Promise<ActivityResponse> { |
|
|
): Promise<ActivityResponse> { |
|
|
@ -166,7 +170,7 @@ export class OrderController { |
|
|
await this.impersonationService.validateImpersonationId(impersonationId); |
|
|
await this.impersonationService.validateImpersonationId(impersonationId); |
|
|
const userCurrency = this.request.user.settings.settings.baseCurrency; |
|
|
const userCurrency = this.request.user.settings.settings.baseCurrency; |
|
|
|
|
|
|
|
|
const { activities } = await this.orderService.getOrders({ |
|
|
const { activities } = await this.activitiesService.getActivities({ |
|
|
userCurrency, |
|
|
userCurrency, |
|
|
includeDrafts: true, |
|
|
includeDrafts: true, |
|
|
userId: impersonationUserId || this.request.user.id, |
|
|
userId: impersonationUserId || this.request.user.id, |
|
|
@ -191,7 +195,7 @@ export class OrderController { |
|
|
@Post() |
|
|
@Post() |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
@UseInterceptors(TransformDataSourceInRequestInterceptor) |
|
|
@UseInterceptors(TransformDataSourceInRequestInterceptor) |
|
|
public async createOrder(@Body() data: CreateOrderDto): Promise<OrderModel> { |
|
|
public async createActivity(@Body() data: CreateOrderDto): Promise<Order> { |
|
|
try { |
|
|
try { |
|
|
await this.dataProviderService.validateActivities({ |
|
|
await this.dataProviderService.validateActivities({ |
|
|
activitiesDto: [ |
|
|
activitiesDto: [ |
|
|
@ -227,7 +231,7 @@ export class OrderController { |
|
|
|
|
|
|
|
|
delete data.dataSource; |
|
|
delete data.dataSource; |
|
|
|
|
|
|
|
|
const order = await this.orderService.createOrder({ |
|
|
const activity = await this.activitiesService.createActivity({ |
|
|
...data, |
|
|
...data, |
|
|
date: parseISO(data.date), |
|
|
date: parseISO(data.date), |
|
|
SymbolProfile: { |
|
|
SymbolProfile: { |
|
|
@ -252,14 +256,14 @@ export class OrderController { |
|
|
userId: this.request.user.id |
|
|
userId: this.request.user.id |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
if (dataSource && !order.isDraft) { |
|
|
if (dataSource && !activity.isDraft) { |
|
|
// Gather symbol data in the background, if data source is set
|
|
|
// Gather symbol data in the background, if data source is set
|
|
|
// (not MANUAL) and not draft
|
|
|
// (not MANUAL) and not draft
|
|
|
this.dataGatheringService.gatherSymbols({ |
|
|
this.dataGatheringService.gatherSymbols({ |
|
|
dataGatheringItems: [ |
|
|
dataGatheringItems: [ |
|
|
{ |
|
|
{ |
|
|
dataSource, |
|
|
dataSource, |
|
|
date: order.date, |
|
|
date: activity.date, |
|
|
symbol: data.symbol |
|
|
symbol: data.symbol |
|
|
} |
|
|
} |
|
|
], |
|
|
], |
|
|
@ -267,19 +271,22 @@ export class OrderController { |
|
|
}); |
|
|
}); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
return order; |
|
|
return activity; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@HasPermission(permissions.updateOrder) |
|
|
@HasPermission(permissions.updateOrder) |
|
|
@Put(':id') |
|
|
@Put(':id') |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
@UseGuards(AuthGuard('jwt'), HasPermissionGuard) |
|
|
@UseInterceptors(TransformDataSourceInRequestInterceptor) |
|
|
@UseInterceptors(TransformDataSourceInRequestInterceptor) |
|
|
public async update(@Param('id') id: string, @Body() data: UpdateOrderDto) { |
|
|
public async updateActivity( |
|
|
const originalOrder = await this.orderService.order({ |
|
|
@Param('id') id: string, |
|
|
|
|
|
@Body() data: UpdateOrderDto |
|
|
|
|
|
) { |
|
|
|
|
|
const originalActivity = await this.activitiesService.order({ |
|
|
id |
|
|
id |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
if (!originalOrder || originalOrder.userId !== this.request.user.id) { |
|
|
if (!originalActivity || originalActivity.userId !== this.request.user.id) { |
|
|
throw new HttpException( |
|
|
throw new HttpException( |
|
|
getReasonPhrase(StatusCodes.FORBIDDEN), |
|
|
getReasonPhrase(StatusCodes.FORBIDDEN), |
|
|
StatusCodes.FORBIDDEN |
|
|
StatusCodes.FORBIDDEN |
|
|
@ -302,7 +309,7 @@ export class OrderController { |
|
|
|
|
|
|
|
|
delete data.dataSource; |
|
|
delete data.dataSource; |
|
|
|
|
|
|
|
|
return this.orderService.updateOrder({ |
|
|
return this.activitiesService.updateActivity({ |
|
|
data: { |
|
|
data: { |
|
|
...data, |
|
|
...data, |
|
|
date, |
|
|
date, |