Browse Source

Support tags in create or update order

pull/1084/head
Thomas 3 years ago
parent
commit
4e8bf49a26
  1. 13
      apps/api/src/app/order/create-order.dto.ts
  2. 23
      apps/api/src/app/order/order.service.ts
  3. 13
      apps/api/src/app/order/update-order.dto.ts
  4. 1
      apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.component.ts

13
apps/api/src/app/order/create-order.dto.ts

@ -1,5 +1,12 @@
import { AssetClass, AssetSubClass, DataSource, Type } from '@prisma/client';
import { import {
AssetClass,
AssetSubClass,
DataSource,
Tag,
Type
} from '@prisma/client';
import {
IsArray,
IsEnum, IsEnum,
IsISO8601, IsISO8601,
IsNumber, IsNumber,
@ -39,6 +46,10 @@ export class CreateOrderDto {
@IsString() @IsString()
symbol: string; symbol: string;
@IsArray()
@IsOptional()
tags?: Tag[];
@IsEnum(Type, { each: true }) @IsEnum(Type, { each: true })
type: Type; type: Type;

23
apps/api/src/app/order/order.service.ts

@ -16,6 +16,7 @@ import {
DataSource, DataSource,
Order, Order,
Prisma, Prisma,
Tag,
Type as TypeOfOrder Type as TypeOfOrder
} from '@prisma/client'; } from '@prisma/client';
import Big from 'big.js'; import Big from 'big.js';
@ -71,6 +72,7 @@ export class OrderService {
currency?: string; currency?: string;
dataSource?: DataSource; dataSource?: DataSource;
symbol?: string; symbol?: string;
tags?: Tag[];
userId: string; userId: string;
} }
): Promise<Order> { ): Promise<Order> {
@ -80,6 +82,8 @@ export class OrderService {
return account.isDefault === true; return account.isDefault === true;
}); });
const tags = data.tags ?? [];
let Account = { let Account = {
connect: { connect: {
id_userId: { id_userId: {
@ -142,6 +146,7 @@ export class OrderService {
delete data.currency; delete data.currency;
delete data.dataSource; delete data.dataSource;
delete data.symbol; delete data.symbol;
delete data.tags;
delete data.userId; delete data.userId;
const orderData: Prisma.OrderCreateInput = data; const orderData: Prisma.OrderCreateInput = data;
@ -150,7 +155,12 @@ export class OrderService {
data: { data: {
...orderData, ...orderData,
Account, Account,
isDraft isDraft,
tags: {
connect: tags.map(({ id }) => {
return { id };
})
}
} }
}); });
} }
@ -298,6 +308,7 @@ export class OrderService {
currency?: string; currency?: string;
dataSource?: DataSource; dataSource?: DataSource;
symbol?: string; symbol?: string;
tags?: Tag[];
}; };
where: Prisma.OrderWhereUniqueInput; where: Prisma.OrderWhereUniqueInput;
}): Promise<Order> { }): Promise<Order> {
@ -305,6 +316,8 @@ export class OrderService {
delete data.Account; delete data.Account;
} }
const tags = data.tags ?? [];
let isDraft = false; let isDraft = false;
if (data.type === 'ITEM') { if (data.type === 'ITEM') {
@ -331,11 +344,17 @@ export class OrderService {
delete data.currency; delete data.currency;
delete data.dataSource; delete data.dataSource;
delete data.symbol; delete data.symbol;
delete data.tags;
return this.prismaService.order.update({ return this.prismaService.order.update({
data: { data: {
...data, ...data,
isDraft isDraft,
tags: {
connect: tags.map(({ id }) => {
return { id };
})
}
}, },
where where
}); });

13
apps/api/src/app/order/update-order.dto.ts

@ -1,5 +1,12 @@
import { AssetClass, AssetSubClass, DataSource, Type } from '@prisma/client';
import { import {
AssetClass,
AssetSubClass,
DataSource,
Tag,
Type
} from '@prisma/client';
import {
IsArray,
IsEnum, IsEnum,
IsISO8601, IsISO8601,
IsNumber, IsNumber,
@ -41,6 +48,10 @@ export class UpdateOrderDto {
@IsString() @IsString()
symbol: string; symbol: string;
@IsArray()
@IsOptional()
tags?: Tag[];
@IsString() @IsString()
type: Type; type: Type;

1
apps/client/src/app/pages/portfolio/transactions/create-or-update-transaction-dialog/create-or-update-transaction-dialog.component.ts

@ -255,6 +255,7 @@ export class CreateOrUpdateTransactionDialog implements OnDestroy {
isUUID(this.activityForm.controls['searchSymbol'].value.symbol) isUUID(this.activityForm.controls['searchSymbol'].value.symbol)
? this.activityForm.controls['name'].value ? this.activityForm.controls['name'].value
: this.activityForm.controls['searchSymbol'].value.symbol, : this.activityForm.controls['searchSymbol'].value.symbol,
tags: this.activityForm.controls['tags'].value,
type: this.activityForm.controls['type'].value, type: this.activityForm.controls['type'].value,
unitPrice: this.activityForm.controls['unitPrice'].value unitPrice: this.activityForm.controls['unitPrice'].value
}; };

Loading…
Cancel
Save